I've been unable so far to create a test plan that actually finds a matching entry in the pairing Set.
I think this is because a match requires both child and parent class instances to be identical, and AFAICT this requires both to implement NoThreadClone. However, there aren't many classes that do implement NoThreadClone, and the ones that do cannot be parents. If my analysis is correct, it would be possible to considerably reduce the number of entries in the pairing Set by checking to see if both classes implement NoThreadClone before storing anything. The Set would still have to be static, but should have few if any entries in it.
