After the final command sending post here it has been working properly. I recently turned of the transport logging, and found it broken again. There must have been a race condition that was hidden by the slowdown caused by the extreme amount of logging.
The fix was to slow down the read again, it appears under certain circumstances, plcd could read back the echo faster than the PLM was sending it. By using a timeout instead of a non-blocking read causes plcd to wait a little while for each character. Under normal circumstances, this will not cause a slow down, but in the case of the PLM needing a bit longer, it ensures the read back will not terminate prematurely with a false nak.