Despite hibernating my Windows 7 laptop at night, I kept finding it up and running in the morning.
A look at the Event Logs showed that it awoke from its slumber around 3 a.m.
It turns out the culprit was Windows Automatic Updates, set by default to install new updates at 3 a.m. every day. Changing the option from Install updates automatically (recommended) to Download updates but let me choose whether to install them seems to have fixed the problem.
Automatic updates is supposed to wake the computer only for long enough to install the updates, and then put it back to sleep again. Clearly this wasn’t happening in my case (unless it was waking from hibernate and putting back to sleep instead of to hibernate). Perhaps it’s something to do with my fix to prevent Windows rebooting without permission.