I think the two problems should be separated. MyTuple -> ByteString should have the properties that the encoding is stable and 1:1. ByteString -> MyTuple should have the property that old data is readable, but it does not need to be 1:1.
So any library that supports backwards compatibility can be used for the ByteString -> MyTuple conversion, including SafeCopy. If SafeCopy implements a new, faster encoding, that does not affect this conversion.
For a key/value store, the hash of the object can be used as key, and the SafeCopy serialization can be stored in the value together with whatever else is required.