I recently (yesterday) did the same type of thing, moving from a CentOS 3.6 box to a CentOS 4.2 box.
In my case, I did the following (firsly getting cPanel installed and everything configured nicely):
1. Stopped exim and chkservd
Code:
service exim stop
service chkservd stop
Stopping exim should force sending MTAs to queue mail, ensuring that new mail doesn't turn up on the server mid-transfer. Stopping chkservd prevents it from restarting exim automagically.
2. Copied accounts using WHM
I opted for transferring some accounts using the multiple account transfer option and some individually. Be sure to go through a test transfer before you do it properly.
I encountered some problems using the multiple account transfer option to move all accounts. It drives the load up a fair bit on both servers due to the moving/archiving/unarchiving of files and, when unachiving on the destination server, it doesn't wait for the load to go down between each account transfer and ended up alomst killing the destination server.
3. Contacted the data centre and asked them to switch over the IP addresses of the two machines. This was the easy bit!
4. Use the IP migration tool in WHM to change over all the IP-related settings on the destination server.
5. Rejiggled the cPanel licences. Due to the IP switchover the licenses were still pointing to the correct IPs but, from the cPanel store account, appeared to be related to the wrong hostnames. This confused cPanel a bit and for a while it reckoned that it wasn't licensed correctly.
6. Changed the hostnames.
The only downtime that occurred was when the IP addresses were being switched over. The whole process took about ten minutes and during this time both sets of IPs intermittently timed out at the router, but this was to be expected.
And that's it.
You might also want to consider looking into rinetd - this is a tool that lets you forward traffic on a given port to a given IP. Using this method you can move relatively easily from one server to another without having to switch the IPs over and without any downtime, apparently.