Snapshots are your friend here. All virtualization products support them (with the notable exception of VMWare Player), and they were created for the exact purpose you have in mind.
Load up your fresh install in the virtualization product of your choice (with or without updates), do whatever configs you want to the image, and then take a snapshot. You can then do your testing and revert back to the snapshot at will. You can take as many incremental snapshots as you want and use them to serve as checkpoints along a path if you need to test the behavior of your project at different points in time.
You can also "fork" each snapshot into its own tree based on different use case scenarios. It becomes more difficult to manage, but it's not beyond the realm of possibility.
In the case of a snapshot that does not have updates, I would recommend you configure an update policy that notifies you of available updates, but does not automatically download/install them. That way you remain in control of when, how, and which updates to install (and yes, you can take snapshots of various states in those cases too).
If testing auto-updates is part of your equation, and the VM image is domain-joined, then you can place the VM into its own OU within AD and create multiple Group Policies to control it, linking and unlinking them at will between snapshot reversions. If not, you can also create snapshots of different configs for auto-updates too.
Really what I'm saying is that the sky is the limit here (well, actually hard drive space is, but you get my point).
SteadyState
is a horrible choice it has been discontinued and there are some major problems with it that won't be fixed. The simplest solution would be to perform all updates to date. Once you do that clone the virtual machine and keep a working snapshot. When you determine its time to update that snapshot, start the virtual machine, and update the snapshot and clone it again removing the previous versions.