I asked about this a while ago (a few years ago?).
Basically there is no way to identify a layer in the TOC other than its current index (taking grouped layers into account) and name, which can both be changed by the user.
I have ended up hooking all the IActiveViewEvents
methods to check when items are reordered, added, deleted, renamed etc to re-enumerate the TOC and update my local index of the layers I am tracking.
This is not ideal, but it was the best I could come up with.