Like I have repeated here over and over again its not your server's fault. The sip debug is useless in this case, You will see the same output always. If you and cullen understand how SIP works you then will notice something important, Who stop the communication with who??
Sip is a handshake protocol or ack based protocol. If your server or your agent start the communication it will expect a response from the far end. In this case the server start the communication to "qualify" your peer by sending OPTIONS sip message, it expect a response from the remoter agent. If not receive any response it start re-transmitting the OPTION package until it FAIL and STOP.
In this case you need a network trace from both sides, to catch the moment when the last "ACK" was received from your agent, so do a network capture not a sip debug(actually the network trace will contain the sip debug) on both sides. And match the hours when your server send the first OPTIONS without ACK received. And start from there.
Since your Snom works perfeclty from the same location try to swap accounts between phones, or add the second account in the SNOM and check. If your grandstream still failing burn it!! Nah just play with the nat settings and check in your router to disable ALG and SPI options just to help a little the crappy stack of GXP.