So this might have something to do with the resolution of your server's DNS name inside the same network where the server is. This brings us to the "loopback" problem when a service tries to resolve an external IP address from the inside.
I think you nailed it. I, as a test, went into my Viewer and renamed the server DNS address with the local IP of the server and my contact immediately appeared online. I can ping my server DNS name from the command prompt from within the network and get a response. It responds with my public IP address.
I just tried ipconfig /flushdns on Viewer and Server, nothing changed.
I'm really perplexed by this issue. It used to work fine on the old modem in network and out of network. I'm using noip.com for dynamic DNS and the app is running on the server keeping the IP address updated with the domain name.