The ForgeDirection rotation matrix for getRotation(axis) has some wrong values, leading to incorrect rotations. For example NORTH.getRotation(UP).getRotation(UP) returns NORTH, not (as one should expect) SOUTH.
Here's the fixed rotation matrix (now using the left-hand rule everywhere):
public static final int[][] ROTATION_MATRIX = {
{0, 1, 4, 5, 3, 2, 6}, // Swapped 2 and 3
{0, 1, 5, 4, 2, 3, 6}, // Swapped 3 and 2
{5, 4, 2, 3, 0, 1, 6},
{4, 5, 2, 3, 1, 0, 6},
{2, 3, 1, 0, 4, 5, 6}, // Swapped 0 and 1
{3, 2, 0, 1, 4, 5, 6}, // Swapped 1 and 0
{0, 1, 2, 3, 4, 5, 6},
};