Warum glaubst du, dass deine MatrixToAngle Funktionen funktionieren? Weil sie das Gegenteil tun, wie die Berechnung einer einfachen Rotationsmatrix? Was wenn es keine Rotationsmatrix, sondern irgendeine beleibige Transformationsmatrix ist, erwartest du da noch sinnvolle Ergebnisse?
Wenn du mehrere Matrizen multiplizierst, und irgendwo in der Kette mal eine X-Rotation drin steckte, erwartest du dann genau diesen Winkel zurück zu bekommen? Wenn du mittlerweile weißt, dass die Multiplikation NICHT kommutativ ist, also X*Y*Z eine ganz andere Matrix als Y*X*Z ergibt, und du von diesem Ergebnis einfach nur auf 1-2 Werte zugriefst und dadurch herausfinden willst, um welchen Winkel gedreht wurde, glaubst du, das kann gehen?
Nun, schon möglich, dass es irgendwie geht, aber es dürfte zumindest komplizierter sein, als deine Variante. Merk dir einfach: Es gelten bei Matrizen nicht mehr alle Rechengesetze so wie bei "normalen" Zahlen, alles was nicht explizit erlaubt ist, ist erstmal verboten und kann nur Blödsinn liefern.
Bei Matrizen wirst du oft ne Menge rumrechnen und bekommst am Ende irgendein Ergebnis, es ist hier besonders wichtig, bei jedem Schritt zu wissen, was er macht, und warum er hier erlaubt ist. Durch rumprobieren wirst du in den seltensten Fällen auf ein korrektes Ergebnis kommen. Glaub mir, ich spreche aus Erfahrung, bei Matrizen ist genaues Vorgehen viel viel wichtiger, als bei anderen Rechenaufgaben.
Und nochwas: Wieso interessiert dich der Winkel überhaupt? Denke abstrakter! Denke bei Matrizen an allgemeine Transformationen, die du hintereinander ausführen kannst (durch Matrixmultiplikation) und die du Rückgängig machen kannst (durch invertierte Matrizen). Du brauchst für dein Problem garantiert keine Winkelzerlegung, du musst einfach nur die Matrizen richtig multiplizieren.