How long it will take depends on the size of the accounts - 300 small accounts could easily be transferred more quickly than just one large account.
WHM offers to straightforward methods for transferring, either account by account or a group of accounts together.
Load is exterted on the destination server when an account is unpackaged and restored, causing the destination server's load to rise. I've previously found that the process can sometimes go a bit wrong if many accounts are transferred in succession and if the load does not drop sufficiently between transfers. Naturally, this all depends on the resources available to the destination server.
Transferring 300 accounts either all at the same time or account by account will probably take quite a while and it might be tricky to keep track of the process and ensure that everything is being transferred correctly.
If possible, group together non-dynamic accounts, and by that I mean those whose database contents are not being regularly updated, i.e. not forums, not blogs and so on. Transfer them and then update the A and MX records on the source server to point to the destination server and these 'simple' accounts should experience very little downtime. Since they're not being constantly updated, it shouldn't matter which server www requests go to. After each account has been transferred, remove the domain, on the source server, from /etc/localdomains and pop it into /etc/remotedomains (as well as updating the MX record).
For database driven sites that are constantly changing, you're going to run the risk of inconsitencies between the databases on the source and desintation servers, depending on where www requests happen to land. This can be mitigated by allowing the source server's IP to remotely access the desintation server's databases and then updating the sites on the source server to use the desintation server's databases - quite tricky for many accounts.
Another matter to address is lost mail. During transfers, mail might go to the source or destination servers and you can't be 100% sure where it will go. If you are able to transfer all accounts in a relatively short space of time (as in all in one day), you might want to stop Exim on the source server. This will cause all incoming mail to be queued on the sending servers. Once the transfers are complete and you've updated all the MX records and moved all domains from /etc/localdomains to /etc/remotedomains, starting Exim again on the source server should allow it to take in mail and then pass it on to the new server.