Since the solution I found for this is not trivial, I wanted to post it here for the record.
I read the man page for
pm-hibernate, and in the section on the
HIBERNATE_MODE configuration option, I saw a mention of the
/sys/power/disk file. I remembered that a few years ago I used to debug suspend and hibernate by writing to
/sys/power/state. The possible values can be seen by reading the file.
I tested kernel-level hibernation with
sudo sh -c 'echo disk > /sys/power/state'. The system suspended and resumed correctly.
So the problem was that
pm-hibernate was doing something wrong.
I tried setting the
SLEEP_MODULE option by creating a file
/etc/pm/config.d/sleep_module with the content:
And that fixed resuming after
Then, I needed to create a file
/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla as explained here.
And I had a fully working hibernate feature for my ThinkPad X60.
There is probably a bug to be filed in Launchpad about this, but I do not know what it would be.
I have had some stability issues with hibernate since applying this fix. So far, it has failed to resume once, and it failed to hibernate once. So be careful. Another sleep module might be more reliable, but I cannot test that until I can reproduce the problems.