I'm going to take a wild guess - that SQL Server determined the location of a row while using a dirty read....and then another process deleted the row....and then the original process tries to actually fetch the row and generated the error.
Reason I asked about the version - this was a documented issue in SQL 2000 and they issued a hotfix for it - I don't know if it's still an issue in more recent versions.