I wasn't aware that there was an ortho under gtc (I just started looking around until I found it). The equations for your matrix look right, have you actually verified that they are modifying the matrix correctly?
This is just speculation, but:
You have a mat4* pointer amat, which you then access by
amat[5] = blah;
Wouldn't this give you a reference to the 6th mat4 in an array of mat4s?
The proper way that I know of to access the fifth element of a mat4 would be:
(*amat)[1][1] = blah;
Maybe your way works too, but I wouldn't think it would, unless that's overloaded somehow.
I think amat is cast as a float*
I actually forgot that you could access elements with double indexing [][] so I thought i had to float* cast it hehe