In the current version of #556, the whole subtree is revived if a single value is touched. This isn't entirely necessary, as only the path to the node needs to be resurrected.
The problem is that all nodes need to be loaded at some point, because the internal hashes have to be regenerated. Nonetheless, even if these leaves are loaded in memory, they do not need to be "revived" and can be replaced with an expired node immediately after computing the hash, and then updated in place if need be.