I keep reading lots of different things about quaternions and axis-angle representations, and they are definitely different. There appears to be multiple ways to convert between the two, so I'll keep reading and try to find the best one.
Do the rotations result in the shape still being normal to the face, or no?
EDIT: I feel a little stupid now. Just realized I should be doing vector addition. Replace
%quatCombined = %quatAngle1 * %quatAngle2 - vectorDot(%quatVector1, %quatVector2) SPC vectorScale(%quatVector2, %quatAngle1) + vectorScale(%quatVector1, %quatAngle2) + vectorCross(%quatVector1, %quatVector2);
with
%quatCombined = %quatAngle1 * %quatAngle2 - vectorDot(%quatVector1, %quatVector2) SPC vectorAdd(vectorAdd(vectorScale(%quatVector2, %quatAngle1), vectorScale(%quatVector1, %quatAngle2)), vectorCross(%quatVector1, %quatVector2));