Hey Temp,
I don't know how you're using DotNetNuke so this configuration may not work for you, however, here's how we handle things:
When working with DotNetNuke, many times people essentially set up a development (code-writing) environment then they have a "testing" environment and then a production environment. However, what I've seen many people do is that each environment really just started out as a fresh install and what makes it "development", "test", or "production" isn't the content that is in the install, it is how it is used.
With us, we treat the website as an actual software development process. Except under rare circumstances, no live changes are ever made to our production website. Let's say that we have a website called "PowerDNN.com" and our internal version number for the website is "7.3.1" Please note that this is not the version of DotNetNuke that the site is running, this is just a number that we attach to our website so that our developers, project managers, and graphics artists have a roadmap.
When it comes time to start working on PowerDNN.com release 7.3.2, we take an exact copy of the production website and "Clone" it into a website named "development.PowerDNN.com". We then start making all of our content changes, graphics changes, structure changes, etc. If at any time we need to install a new module, we first install the new module into "playground.PowerDNN.com" and test it out to make sure it installs nicely, uninstalls nicely, and does what it is supposed to. If it does, then we install it into Development.PowerDNN.com .
Once we have the development website where we want it, we take a complete backup of the website (website and DB) and then restore it over the production website. This brings all of our changes live, in batch.
Essentially, If teh production website is Version X, then our development version is always Version X + 1. If someone ever happened to see our development website, in the worst case scenerio, they're going to see content that that isn't ready to be released yet, for example, announcing a new version of DotNetNuke is available, etc.
I hope this helps.