Been doing this for years myself.

I am busying moving Linux between Msdos disk and gpt disk (able to cross 2TB barrier) at the moment.

If I want to move a Linux from sda3 to sdb9 the steps are

(i) Format sdb9
(ii) Mount both sda3 on /mnt/sda3 and sdb9 on /mnt/sdb9
(iii) Cd to /mnt/sdb9 and tar the partition across by
Code:
tar cf - . | ( cd /mnt/sdb9; tar xf -)
(iv) Edit /mnt/sdb9/etc/fstab to change the partition reference from sda3 to sdb9
(v) Do the same for /mnt/sdb9/boot/grub/menu.lst
(vi) Invoke a Grub shell and do
Code:
root (hd1,8)
setup (hd1,8)
setup (hd0)
The last one is optional for making the Linux taking charge in the MBR of sda disk. The second last command makes the Linux chainloadable by another boot loader.

The only things you need to watch out for are

(a) Distros embedded with Selinux, typically the Red Hat family (RHEL, Fedora, etc) don't like to be moved. You have to disable Selinux by adding "enforcing=0" in the kernel boot statement, otherwise you get a booting screen but can't enter into it.

(b) Mandriva family ( Mandriva, PCLinuxOS) has a feature that it keeps a record of the installed partition. In the event after it has been moved the kernel would wait between 1 to 2 minutes for the original partition to occurs before firing itself up at the new location. I have not found a way to get over this one yet.

Apart from the above Linux is pretty easy to move around between partitions and disks I would say.