I am assuming you are using View Composer to create your VDI desktops? When you create a pool of vms for the first time, it will give the machines a MAC address, get an IP, join it to the domain, etc. If you are using non-persistent vm's (they get destroyed when users log out) then the next time that machine is rebuilt (when someone else logs in and it's needed) I think it will get the same name but a different MAC address and perhaps a different IP as a result. If you instead use persistent vms, the MAC's will not change once a user is assigned to a vm -- so that may solve your problem. You could also change your DHCP Time to Live value to be a shorter amount of time so the 'old' leases will expire and drop off the list quicker, freeing up available IP's.
Do the machines you are seeing multiples of in DHCP have users assigned to them or not? Even in a persistent pool, if there are machiens that are not assigned to a user, when you recompose or refresh the pool, the MAC will change on the unassigned machines. It only stays put on machines with users assigned. At least that's the way it has worked for us.