I commented waitforX out in .xsession to test this whole issue; I can confirm I could suspend to ram without it, and also that X needs to be restarted to make it work properly.
So I replaced waitforX with a sleep=3; X started OK but again s2ram did not work, same problem as before with waitforX.
If I use sleep=3, and restart X before s2ram, then it resumes OK. This does not work with waitforX.
So I would agree it is not waitforX which is the problem.