just my 2 cents, personally - i couldn’t recommend sysprep more, we have one image per OS (under most circumstances) rather than per hardware and had to find this solution because we have over 30 models on our network (don’t ask!) so to have nearly 60 images to look after wouldn’t be feasible… can you imagine just having to install windows updates on each one!?!.. cringes
just to give you an idea of how i’ve set it up here (i understand this way doesn’t suit/work for everyone)
our image is stripped down and has minimal on it as possible, so it basically just has company branding, microsoft office on it and all windows updates, nothing else (unless it’s software that takes a long time to install or doesn’t change frequently etc…) - this is all built in audit mode. to keep unnecessary drivers etc off the image and keep image size as small as poss, i build the base image in VM also meaning i can just use snapshots for the “before and after” sysprep and if i want to update the image just fire up VM and revert to snapshot rather than deploying etc.
Then when the image task completes and before fog reboots this is what i get the init.gz to do.
- changes hostname in unattend.xml to that of the machine to match fog
- adds ad details into the unattend.xml if set to join in fog (domain, ou, account to auth etc etc)
- downloads drivers to disk for that specific model and OS you just deployed (drivers are stored in same directory as images on server/node and drivers are extracted into .inf form.)
- edits registry on machine to include the location of the downloaded drivers
- downloads software installers from server/node to the root of the disk (this way when machine boots up and is installing them, it’s running installers locally and don’t have to worry about “network traffic/auth” etc etc…)
so when the machine then boots up into sysprep, it’s got it’s unique details already and the drivers get installed as part of sysprep, it also eliminates the needed reboots to change hostname, add to domain etc or run any scripts post sysprep (apart from snapin!:)).
machine is set to autologin so logs in and snapin is set to lowest sleep time possible so it kicks off pretty much instantly and the snapin is just a small script with a gui (a pretty progress bar!) doing little changes, removing autologin, adding shortcuts here or there and installing those software previously pulled down from the server/node things like, adobe, java, AV, remote tool etc etc etc then finishes by removing installers, cleaning up, updating bios and reboots and it is then ready for the user to use. 
doing it this way means i barely have to update my images, only for windows updates really. When new software comes out like adobe, all i have to do is update the installer on the server (also synchronizes across nodes) which means minutes work rather than having to update the images.
same goes for a new model - all i do is add the drivers for that model to the driver folder and presto! new model supported 
takes around 15-20mins to build new machine from start to finish (ready for user to use) and there’s nothing for our engineers to do once imaging starts, so all in all only take 2/3 minutes of their time (to register machine and kick off image)
sorry for the long post just thought i’d share my setup too!
p.s. chad i could help you with the driver setup if you want but with recent development within FOG and upcoming/future plans might not need the assist, watch this space… 