I was having a similar issue with my scripting approach when I was still actively developing it.
Like in your solution, when equipping the item it's not difficult to store its health prior to the forced unequip and after the scripted equip of the substitute reapply the stored health to this one.
But when I unequipped an item and the scripts removed it from the inventory and added the original one back in there was no way to obtain its health "after it was unequipped". So I obtained the health of every item equipped each run of my token script, and as soon as an item got missing (was unequipped an instant ago) the stored health for this item was applied to the original item added to the inventory afterwards accordingly. There's the off chance to miss a tiny amount of health lost between the last regular check and the unequipping by the user, but back then my scripts were default configured to check every 5 frames or so, and that's not really enough time for huge differences.
I'm not sure anymore and would have to read it up again first, but weren't there some additions to OBSE covering modification of "unequipped" items in your inventory directly as well, as in messing around with the reference data stored aside the base object entry for the items in your inventory? But my memory's the worst one can imagine, so this could be just me mixing up things again as well.