Hmmm... Puzzled by the 6 bytes in .InQueue while disconnected. I do cache the bytes remaining in the queue when the socket is being forced closed by the server, and I just found a bug in the Simulator where that value was lying at times, but I don't know of any issues in the DM1 implementation. That bothers me.
Aside from that, .Connected is what you need to be testing if you want to conditionally call OPENTCP. It really doesn't matter though, OPENTCP does the same check internally, so it is never a problem to start your request by calling it.
Please try this for me: Add an OPENTCP that you can manually trigger. Enable it and watch the .Connected member. If it turns on, and goes right back off, your server is terminating the connection due to inactivity or possibly security. That is not at all uncommon with things like web or mail servers where they are processing bazillions of requests very quickly and even short periods of inactivity on a port can cause some server constipation. Admittedly the 30 to 50ms seems very quick for a forced termination, but let's start there.