We can't use a Dictionary<int, IJavaObject> mapping between JNI handles wherein the dictionary key is the result of System.identityHashCode(), as it's possible for multiple Java objects to share the same System.identityHashCode() value. (Rare...but possible, and will only get more possible.)
We need to move to a system that uses JNIEnv::IsSameObject() to ensure we lookup the correct instance for a given JNI handle.