Thanks! Glad to be here!
That QnA post was exactly what I used to get the variables I needed for my Raycast. I currently have 2 methods that I find can actually rotate the player correctly, but both have some problems:
1: transform.basis = new_basis; new_basis is a variable that I made by rearranging the right, up, and normal vectors that are returned using the script on the QnA post (new_basis = Basis(up, normal, right)). Like I said in my original post, the biggest problem with this is that it is setting the character's rotation on all axis, including it's local y-axis, witch is what I need to use for movement rotation.
2: transform.basis.y = normal; this is actually enough to be able to get most of the rotations I need and none of the ones I don't... BUT... now whenever the Kinematic Body rotates it gets scaled as well, resulting in it getting "flattened".
Not to mention I still don't know what to do with the movement rotation.
Also, out of curiosity, if you are able and willing, could you send me the source code for that prototype of yours? I have a feeling that it could help.