An IDE drive will "hide" (relocate) a bad sector under the following conditions:
It is told to read a sector, and detects corruption in the sector, but can repair it with ECC.
It is told to read a sector, detects unrepairable corruption in a sector, and is later told to overwrite that sector. However, in this case the OS would have detected it as well, and may have marked it as bad on the filesystem level... in which case it would not try to overwrite it.
Once a sector is relocated, it pretends to be the same sector as before, except that it's physically located on a different part of the drive. The drive is only capable of doing this for a limited number of sectors, because it has a limited number of spare sectors set aside for this purpose. If it runs out of spares, then all remaining and future bad sectors become permanent.
SCSI drives do the same, except they can actually report a list of relocated sectors (but only if asked to do so; software is needed to do this and display the results).
On the other hand, bad sectors that are reported by 'chkdsk' were marked by Windows, in the filesystem's Master File Table; in NTFS, there is a "file" called "$Bad" which points out sectors found to be bad. Windows then avoids writing to them at all. If you clone/ghost the partition to a healthy drive, these sectors will still be marked as "bad" even though they are not bad. (In the past I've dealt with this by zeroing-out the 4th file record, belonging to $Bad, with a disk editor; 'chkdsk /r' will then recreate it. But I don't recommend this unless you really know what you're doing.)
The reason a zero fill is useful has nothing to do with the fact that it's filling the drive with zeroes; it could also fill the data with random bytes (except for sector 0, the partition table). Writing data to every sector on the drive forces the drive to relocate any latent or pending bad sectors, as long as they were previously detected or are detected during the writing process. Then when you format the drive (i.e., create partition(s)) there will be no bad sectors.
There was another thing I was wondering about... Jed2, how did you run 'scandisk' on your NTFS partition? AFAIK, this utility was never included in Windows NT/2000/XP. You can do 'chkdsk' from a command line, and you can also right-click a drive letter in Explorer, click "Properties", then "Tools", then "Check Disk". This second method should behave exactly as chkdsk.
Anyway, I wish you luck in figuring out what's wrong! It sure sounds like a doozy, and part of me wishes I could be there debugging it myself... I love a challenge. So, have fun.