Wooo! ..that's quite interesting.
But I am curious what is your workflow that you need the only old object.
What do you mean by "not equal"? They are objects, not variables. Equality doesn't really mean anything.
By equality I mean reference equality.
1. I could get a component by calling IAssemblyDoc.GetComponents(false) and taking it from the returned array.
2. I could get a component by selecting one and then use SelectionMgr.GetSelectedObject6.
3. I could get a component by taking one component from 1 and ask for its parent, or its children, and take one of them.
4. I could get a component by retrieving it via IModelDocExtension.GetObjectByPersistReference3.
There are probably other methods as well.
Up until now, it did not matter which ways I used - if I took two components comp1 and comp2 of which the Name2 was the same, the expression
"comp1 Is comp2"
Which means they were equal (in a reference equality way).
Even though your answer doesn't solve my problem, the method "IsSame" allows me to work around that issue.