I can't see why there is no method to get back ownership of the key used to create the entry. There is such a method, into_key, for VacantEntry. OccupiedEntry will give you a reference to the key with key, and has an unstable method replace_key which moves the key into the map.
Is there a technical reason this can't exist? Has it just not been implemented / thought of yet? It would be useful right now for what seems like a fairly basic operation: checking if an entry exists, and inserting if it doesn't, returning Result<&mut V, (K, V)>. Is there any way to do this with just a single check of the map?
Note that OccupiedEntry::key (currently) always gives you a reference to the existing key, not the replacement key. That said, with replace_key existing, I think the lack of an into_key is just and oversight; you (or someone else who cares) could try a PR to hashbrown (the library which std uses for the std hashmap) to add it.