As Yan said, I don’t think there’s a strong reason to use Candid for (de-)serializing from/to stable memory. I think it’s mostly the “obvious” choice since it’s already used in the interface specification of the canister and then using the same for your data storage is a reasonable choice.
Of course, I know of some teams that use other serialization formats that they found more efficient or easier to use in the face of adding/removing fields and certainly you’re not tied to Candid, at least not when you’re using Rust and you have a large ecosystem with many serialization formats to choose from.