Short answer: possible for weapons and shields (and offhand weapons if they count as a 'shield'), in very special cases possible for the rest.

Longer explanation (and some Larian rant ;-):

You can only register equipped weapons and shields with the CharacterGetEquippedWeapon() and CharacterGetEquippedShield() queries, but you cannot get the handle of any armor equipped, including jewelry.

You could register the handle of an armor piece in the ItemTemplateAddedToCharacter() event together with the ItemHandleIsEquippable() query, but that would only tell you that an equippable item was added to a character, not that the specific handle was actually equipped.
Even if you built a database with added equippable items you could never make the connection when an armor piece is equipped, only in the special case when the ItemTemplateIsInCharacterInventory( _Char, _Template, _Count ) query returns with _Count == 1, that is, if there is only ONE equippable of the specific template in the char's inventory.
(Equipped stuff also counts as inventory I think. Rings and amulets for example each only use three different templates, except for special quest and story stuff like the Phantom Amulet or Icara's Blessing which have their own templates, so you can guess how high the chances for duplicates are.)

The GetItemhandleForItemTemplateInInventory() query will give you ANY handle of the specified template be it equipped or just sit in the inventory, I believe.
(The query seems to return one item only and no tuple, as I had once expected, it must be some 'top or bottom of the stack' thing, probably the order in which items where added - this might be the case for your 'dialog problem' too: a stack gets queried and some internal index incremented on every query and never reset as long as the dialog is still active, and if this internal index is above the last stack index, nothing is returned anymore. Larian has tons of 'implemented for current special requirements' story code, and the fact that they never documents anything does not help. So I assume that 'weird and unexpected behaviour' is also possible in dialogs, we just don't understand it because we have absolutely no documentation.)

Larian would have to change the Osiris API to include the handle in the Equipped event or add something to query all equipped gear not only weapons and shields. (Better not change the API but add a new and this time complete event ... and think of more generic solutions in the future instead of 'fits current need' programming.)

The Osiris API is VERY far from complete, Larian seems to add calls or queries only when they currently need them, they build them the way they currently need them no matter how weird or unexpected for outsiders without access to any documentation ... not to mention misleading names.
So nothing they never needed in their projects seems present, for example there are no getters or setters for character and item script variables through handles, which are more generic than ITEMs, the API is even only halfway complete for ITEMs.
(Okay, there is ItemHandleGetVarString() but nothing else ... they probably never needed that. More generic programming of course is impossible because of that. Don't expect too much of DOS2 or - god beware - a complete or close to complete API ...)

You have done a lot with character and item scripts I suppose and the situation there is not much better if at all ... or is there an OnResurrected() event ? (... which on the other hand exists in Osiris ...)

I'm sorry that I cannot give more help or hope, I did a lot of work with Osiris recently and learned a lot, but what you want to do seems impossible to me, except for weapons and shields.
(I hope that a dual wielded offhand weapon counts as shield in the Osiris context, but it would not surprise me at all if it did not, if only real shields counted ... because they never ... you guessed it ! ;-)