“Is there any way to schedule a task based on a system event?”

… such as an event written to the System Log, or a laptop losing mains power?

Windows Vista, or later? Yes, indeedy.  Task Scheduler has this functionally built right in.

Windows 2000/XP? No. But you could write a program to do that.

Something like this little Visual Basic 2005 program, for the “laptop losing [...]