Replicating or transferring an installation from one hdd to another is needed when you have customized your Debian over the years and don't want to go through the process again and again.
The first thing to keep in mind is that you should keep your packages least custom modified. Also try to use abstraction as much as possible. For example, try not to hard code any hw specific stuff in any packages.
If your current primary disk is bootable to the new machine (eg. over USB), then it is just a simple matter of rsync-ing everything and install grub on the new device. Be sure to chroot into it to verify any final bits.
In cases of UEFI, things get more painful. Also, depending on how complex a stack you've built, things may vary. For example, I use block encryption (dm-crypt). On top of it I use root and swap as LVs. Thus in my case, I need to ensure that no application I use is hardcoded beneath the file system layer. Otherwise it asks for trouble.
PS: I just, yesterday, finished migrating my setup to a new laptop with UEFI. I must thank the Debian install team for a) Creating awesome UEFI support. b) Simplifying the process of creating a USB Installer. It is just a matter of dd-ing the iso to the flash device. Though I did run into a challenge to find a dd port for Windows, luckily my Raspberry Pi came to the rescue.