I've had this problem a few times now: I'll record an activity on my 310XT, go to upload it later, and the sync agent fails to pull the activity. My suspicion is that there is a bad block in the flash memory on the watch, and the watch hardware is old enough where it can't work around it. I had this problem with the old Garmin ANT+ Agent under OS/X, and I just experienced it under Linux, with Garmin Forerunner 610 Extractor, a Python script that does a similar job to the ANT+ Agent. What's interesting is that the new script always downloads all of the activity data, so I've been keeping the old activities around, and I now know that the error occurs somewhere between 540k-584k of memory usage, and that the value equates to 24% of the watch's memory, based on whah the watch says. So it's a good guess that the watch has about 2 megs of memory on board.
(The sizes above are the byte count and the filesystem size of the downloaded activities.)
The solution here is to wipe out the old activities (and occasionally reset the watch), but it's still frustrating. Luckily I only lost one run; there are times when I'll go for a few weeks without downloading any run data.