The way I usually do it is this
1. Set up a test server on my local machine that uses a virtual host so the domain is actually identical to the remote domain (you can create a batch script to change in and out the windows hosts file so the live domain only resolves to your local machine during active development).
Use Wamp or Xamp to get a server running on Windows. I've never comes across anything in Wordpress that doesn't work identically in Windows and *nix (assuming Apache server).
2. Do all your work locally until the site is running the way you like.
3. Put your new site in a new database.
4. If the current site is on the server at www, put the new one at www1.
5. change the directory names and your new site is live. Problem? Change the directory names back and the old site is live again and you can debug.
You could also put it on a subdomain or an unused domain and test that way. I like to test on the same domain as the target domain.
You should not necessarily have to 301 a lot. I would think in most cases you could use the same URLs.
Another alternative might be to bring the subsites under the new umbrella one at a time. In that case, you would probably have to copy and paste individual pages into the new site interface, and then expire the old page just before you make the new pages go live on the old URL. If you feel like plugging away at it over time, that might be the way to go, but with all those WP installations running here and there, that could get complex.