I think I've solved this one, with some help from Smudge
. The powrprof.dll actually has three boolean parameters:
Hibernate, ForceCritical, DisableWakeEvent
It's the last one that's causing my problems. By default, they're set to 1,1,1, whereas to hibernate without scheduled tasks being disabled you need:
rundll32.exe powrprof.dll,SetSuspendState 1,1,0
-Hecks