I've been fighting with this myself lately. In my limited experience, restoring an image to different hardware hasn't worked very well.
I settled on just backing up critical directories (/home and /etc). More often than not, my need for recovery is because I accidentally deleted something I wanted to keep.
I must caveat that with saying that I use dpkg in Debian to keep a list of what's installed on my system. There's a mechanism for taking that list and importing it into dselect, then doing an upgrade that installs the same packages (though not necessarily the same versions). Basically it looks like this
dpkg --get-selections > installed.txt
aptitude update && dselect update
dpkg --set-selections < installed.txt
It works across machines, even across architectures. Then I just weed through my backed up /etc to replace the config files I need. You do have to be careful though to make sure config files haven't changed if you get a newer program version installed than on the old machine.