Fixed it. I did have a bias, although it wasn't correct, it wasn't the full cause of the issues. The underlying problem was really, really silly.
This line of code...
shadowMatrix = shadowViewMatrix * shadowProjectionMatrix;
Was reversed, and should have been:
shadowMatrix = shadowProjectionMatrix * shadowViewMatrix;
I didn't think that would make a difference, but it did.
Thanks anyway, I appreciate it!
Not Telling