If users assign IPs to their systems, they'll choose whatever they fancy, and no amount of begging, asking, shouting and threatening is going to change this. Therefore, the safest way would be to separate subnets of servers and users. In that setup a user can conflict only with another user and disrupt one person at worst. What is more, if they assign themselves an address from the servers' network, their networking will not work at all, and that's a mechanism that speeds up users' learning a lot.
That's the only way you can prevent people with administration rights assigning reserved IPs to their stations -- make it not work.
As far as detection goes. You wait for a report. Either a user, who had a working configuration suddenly looses access to the network (i.e. there's a newcomer with a Windows station that does not respect TCP/IP standard of not bringing interface up if it detects an IP address conflict), or a user reports in, that he configured an IP and it does not work.
In the former case you know, that the wrongdoer took over the IP. You can connect to the same network and use
arp to determine his MAC address. If you have an assets database with MAC addresses of users' computers, you have the perpetrator. If you don't then it's time to see which port of which switch sees this MAC on its interface, go to the corresponding wall socket and see whose cable is plugged in. Bring a 2x4 LART.
In the later case the newcomer is the one who tries fancy tricks with his network setup, but has a well-behaved OS installed. Instruct the user on benefits of using DHCP service set-up by his hard-working admins. If he does not appreciate, use the above-mentioned LART ;).