The "proper" answer to how one makes it possible to RELIABLY hard-power Windows XP is to use what Microsoft calls the "enhanced write filter". Basically, this is a copy-on-write ramdisk.
What you do here is set everything up, then tell Windows to overlay a ramdisk (or, I think, a separate partition on the drive that's basically just used as scratch space) on top of the main filesystem upon next boot. Any and all writes that would go to the hard drive instead go to the ramdisk. When you power off, it's all lost, and when you power back up, the system is exactly 100% like it was the last time. The hard drive never gets written to. There is precisely zero chance of filesystem corruption.
You can still use a swapfile. It doesn't matter. Windows will happily ignore the contents when it starts back up.
If you want some non-volatile storage where reliability isn't a huge deal (e.g. for high scores), you can dump them on a separate partition. There's a way to overlay this back into the main C: filesystem if you really want to.
If you do need to make changes, you can just disable EWF for that session (make sure you shut down properly, then), or there's also a way to "commit" the changes that have been placed in the scratch area back to the original backing filesystem.
In practice, NTFS's journaling is decent enough that you're unlikely to toast the whole filesystem on hard power down, but you may lose data. The data loss should be limited to things that have actually been changed, but if that occurs in, say, your registry, your Windows install is probably hosed.
EWF is technically only included with XP embedded, but there are tutorials out there on how to make it work on normal XP Pro.
I assume Vista/7 has a similar option. Windows PE may also be usable for this, though it's probably against the EULA, and WinPE typically takes a long time to boot.
You can do something similar on Linux using unionfs and tmpfs if you want to. The LVM can also be used to snapshot the block device against a ramdisk (or just drop the snapshot and make a new one on each startup, still backing it with the disk).