I've spent the past several days playing with the laptop. Unfortunatly yesterday when I fipsed the original dos parition, the hibernation mode stopped working. Bummer -- I'll probably have to reinstall to get it back.
I came accross a program named mobile-update, which replaces update, and only flushes dirty buffers when the disk is already being accessed. I like the idea but not the implementation (which won't work on 2.2 kernels with kflushd anyway), so I wrote my own. It can detect if a laptop disk is spun down, and if so, it defers dirty buffer flushes until it spins up. Combined with noatime and turning off vim's habit of fsyncing all the time, the daemon can let the disk stay spun down most of the time (so long as you're using just a few programs and files which are already cached), which improves my battery life by up to 7%.
I guess I'll release the new mobile-update tomorrow. It's been nice to spend some time writing C code and reading the (poorly documented, sigh) kernel source. I've been too perl-centric the past few months.