Hey Joel,
Well, even though the customer is using the same Windows partition for both bare-metal and VM boot, he's actually booting 2 different machines. A Virtual Machine is a different machine than the bare-metal machine (the underlying "hardware" is different, and thus the fingerprint is different).
This is actually a perfect use-case for TurboFloat: http://wyday.com/limelm/help/using-turbofloat/
http://wyday.com/limelm/help/vm-hypervisor-licensing/
Your app, using the TurboFloat library, will be able to run no matter whether they're using your app under a bare-metal machine or the virtual machine.