Ok, there is some little known info that people don't know about hard drive diagnostics.. but I'll explain that in a second.
Your CRC error tells us that either you don't know how to run simple software(I seriously doubt you are in this group since you seem to be able to spell correctly, so you aren't a rock), or you have a hardware failure of some sort.
Now, where is the hardware failure, because you want to fix it? This question will be difficult. The easy answer is to say it's gotta be the hard drive, because what you are reading off the hard drive after the copy is wrong. That's not necessarily the case. To copy data from a USB to internal hard drive, you have to go through alot of places. Through the hard drive(caching, USB on the hard drive), then via USB wire to USB controller on motherboard, then through RAM, CPU, caches along the way, to the SATA(or IDE) controller, then to the hard drive(and it's cache and processor), THEN to the plattter. If any of these points fail, beginning to end, your data is lost.
Believe it or not, it's actually common to have a normal CRC failure every 1x10^9 read requests. Sounds like alot, but for some, that's just a week or so. What is the solution? Attempt to re-read the sector, and then the error sometimes goes away. This is due to the physical world.
Now, your first thought was the hard drive. I will grant you that it IS probably the hard drive. If it was anything else, you'd definitely know. If it was bad RAM, CPU, Cache, motherboard, even USB wire, you'd have LOTS more problems. BSODs, hard drive not detected when plugged into USB port, computer not POSTing, etc.
You ran a scandisk, and it came up okay. Now, scandisk is a VERY simple hard drive test. It only reads every sector. If the hard drive reads without an error(or the hard drive controller's driver isn't written to handle any error codes), then scandisk assumes that the sector is good and moves on. This is a very bad assumption. It is possible to write a block of data and have either the bad data be stored with an equally bad CRC(very very unlikely) or the hard drive was unable to fix the data using CRC, so it gave you what it had(likely).
Now, the OS is supposed to take the error the hard drive returns, and do something with it. You'd think "attempt to read again in case it works..", but Windows drivers aren't always that smart. They might just use the data and ignore the error.
It's not possible to identify this error without doing a read/write/verify test. It is not possible to perform this test from within Windows XP GUI. I'm not sure about Vista since I do not use it. The OS maintains control of the drive, and it will not let you test certain areas of the hard drive.
Your comments sound like this is possible. This error type sucks because it's hard to diagnose, and you keep ending up with corrupted data. You will need to get your hands on a diagnostic tool that can do write pattern tests. It will read your data, write a test pattern, verify the test pattern is written correctly, then write your data back to the drive. This process is VERY time consuming. A 1TB drive I tested took almost 24 hours. See why scandisk doesn't do this kind of test?
Spinrite is a good program to use, and I believe that Norton Systemworks(now called Norton 360) has this test on it's boot CD. You can also try some of the diagnostic tools from your hard drive manufacturer. There is no need to test the external, as the problem is likely the internal drive. I have seen this problem more than once, and it sucks every time. I do a write test to my hard drive on my laptop every month or 2, and I am sometimes shocked at how often I will find a new bad sector.