Matrix is too big a struture to always pass by value like
Vector3 v1 = Vector3.TransformNormal(n, matrix);
I think it's better to write:
Vector3 v1 = matrix.TransformNormal(n);
Also this is better to read: "matrix transform normal n".
Just my 2 cents...

Suggest moving TransformCoordinate() to Matrix struct...