"dd if=/dev/hda bs=10k of=/dev/hdb bs=10k"
You don't need to specify the block size twice, you may specify it only as the last argument in the code to make thing simple. Also, if you want to be sure at getting your MBR chunk at one time shot you may reduce your blocksize to 512. Try this code:
dd if=/dev/hda of=/dev/hdb bs=512
Before redoing your dd, to check if your boot record works under the new drive you may try copy it only and test the drive if it boots. Do this:
dd if=/dev/hda of=/dev/hdb bs=512 count=1
this will copy only the booting sector into the image. Test boot it after doing that.
1) Does the boot size (bs) have to be anything special for XP
(e.g. 512, 1024, etc.)?
Ans: No nothing special.
2) Any way to monitor the cloning process (e.g. progress bar or counter)?
Ans: I have not known yet with "dd" command, but certainly it will return the number of blocks copied in and out in the end, so there's nothing to worry about.
There was a chance that in the previous cloning process you might have inadvertently interrupted the process thus the program may have accidentally responded too committing error in the copying. So to make sure, dd it again this time with a smaller bs=512, anyway, you won't be charged for anything doing that.
How should my "dd" string be modified?
Ans: Try omitting the "bs" block size before the "of" line, to eliminate suspicion.
3) Can't believe "dd" didn't work. Am I missing something?
Ans: Try and retry, this is the spirit of learning.
Hope this helps.