>>51480838I don't remember the exact details, but for some reason every pokemon in gen 1 stores its catch rate in its own data structure together with other individual data (like IVs/DVs, experience, etc) rather than using lookups to a database-like structure with common data between species (like species name, base stats, etc).
Since there are no held items in gen 1, when a gen 1 Pokemon is traded to a gen 2 game, the game interprets its catch rate value as a held item. Most of possible catch rate values are mapped to some item in gen 2, and those that aren't have this value altered upon trading to match an existing item (usually some kind of Berry).
Sending Pokemon back and forth between generations doesn't change the held item given to it in a gen 2 game because gen 1 game never changes the catch rate value (that now holds ID of a gen 2 item).
tldr Krabby holds Snore because Krabby's catch rate value corresponds to the ID of item TM13 Snore in gen 2.