"During a battle with an enemy, the character's inv item [...] and everything goes tits up" = doesn't work as intended.
Having settled that, in the timed event's code, check if the player's .ActiveInventory == item, then set mouse.Mode to eModeInteract or whatever before calling .LoseInventory(item);
That should fix that.
The second problem sounds like a bug, but could be sloppy scripting.
Without knowing which template/module exactly you're using, I can only suggest to try to out stuff in on_event(eEventRestoreGame), like dis- and reenabling the inv window or something similar to "reset" the behavior to normal.