Hey acdesign,
I have done about a dozen or so of these exact migrations. I wrote a couple of bash scripts that did all of it on the client side. I can tell you, there is always a margin of failure and some machines will most likely have to be touched by a human when or if they fail. However, that is not always the case. This is basically how I tackled it:
1) - Obtain a CSV file the old computer name (current), and the new name for the device record in AD, as well as a CSV for old domain user name, and new domain user name. It should be formatted in a manner where it would look like this - oldusername,newusername and the computer name CSV would be the same - oldcomputer,newcomputername
2) - use a script that does the following:
i ) removes old AD binding from old Domain
ii ) grabs the current computer name from the device and parses the computer name CSV file
iii ) once a match is found, it renames the computer to what new device record should be in the new domain
iv ) Once the computer name is found, and change, trigger an AD BIND
v ) repeat with end user name, same logic with the CSV, end user cannot be logged in, and it will use the mv command to rename the home folder
vi ) set proper ownership and permissions to new account, so when user logs in with their new domain creds, it just works
vii ) deletes old user record from the BSD database via dscl
viii ) end user logs in with new AD creds, bound to new AD server, with a home folder renamed to their new user name and permissions set for them to already own it.
3 - script had fail logic in it that wrote to a log file, then triggered a recon immediately so extension attributes could track failures, track what failed, and give you real time results and then sort those into smart groups by specific failure. For example, unsupported version of OS X, computer record or username not found, unable to BIND to server, etc.
4 - set policy to run said scripts, and then track failures and address hot fixes or reattempt to smart groups based on failure.
Unfortunately, these were custom development scripts so I won't be allowed to share any of the code. Hopefully you can take this basic work flow though and build your own. I can tell you that you will need to test this probably 50+ times before going into production because every time I did one, I always found one new little snag here or there regarding these work flows.