It seems that Transform.GetHashCode is buggy, and does not involve all 16 coordinates in its calculation. Attached a Grasshopper model that confirms this. The hash codes for 2D rotations result in two different numbers only

I think what happens is that the number returned is above the maximum or minimum 32-bit integer but you can not get that real value, due to a lazy hashing algorithm like m00 ^ m01 ^ m02 ^ m03 ^ m10 ^ m11 ^ â€¦ has a high probability of falling outside the limits of the integer number.

Try your own algorithm like this one where each int means the hash value of each matrix value: