More on this mess. First of all the difficulties with suspend to ram are explained quite nicely in /usr/src/linux/Documentation/power/video.txt.
Secondly, there are a number of drivers that do not "play nice" with ACPI sleep. For the thinkpad this is the 'hsf*' modules for modem and the "nis-ircc" module for the infrared devices. Also check the driver for bluetooth as I don't have one so i can't check.
Thirdly, the behaviour is dependent on which video card one has and what driver one is using. Restore works more stably with the "vesa" driver (see Pavel's documentation on suspending in the same directory given above).
However, I have managed to get suspend to work somewhat stably with the i810 driver (glx!) as follows:
Start in recovery mode and save video state with
vbetool vbestate save > /usr/local/lib/vbe_base_state
Your suspend script should save the contents of
before suspending and restore immediately afterwards.
Your suspend script should after the above restoration run
vbetool post" "vbetool vbestate restore < /usr/local/lib/vbe_base_state
I also find it safer to send a "kill -STOP" to the X server before suspending and a "kill -CONT" at the end of the suspend script. This ensures that the "raw mode" keyboard and mouse inputs that are accidentally pressed when putting on the machine are not passed on to the X server.
Finally, if all else fails, the following works. Suspend to disk after a failed restore from "sleep", kill and restart the X server. This may not help as you loose your working session but at least you don't loose your uptime record :)
By the suspend to disk is now working with the current unstable "linux-image-2.6-686" and "initramfs-tools" in Debian. For this you only need to stop hsfmodem before the suspend. The rest just "works".