I'm absolutely no shader expert so this is just a very wild guess and might be completely wrong! ^^
Afaik the components in the matrix are layed out column wise (vertically) and look somewhat like
IN.tangent.x IN.binormal.x IN.normal.x
IN.tangent.y IN.binormal.y IN.normal.y
IN.tangent.z IN.binormal.z IN.normal.z
and is memory wise simply stored as 9 floats in this order.
So similar when you explicitely use the float3x2
constructor you get something like
IN.tangent.x IN.binormal.x
IN.tangent.y IN.binormal.y
IN.tangent.z IN.binormal.z
When however you simply typecast I suspect that you simply cut off the last 3 float values and force the shader to interpret this now 6 floats array as a new float3x2
matrix which now might look like
IN.tangent.x IN.binormal.x
IN.normal.x IN.tangent.y
IN.binormal.y IN.normal.y