It should be OK to write from OnRxChar. Do you check though you're not writing in a full write buffer?
in this case I have a very strong feeling that output buffer cannot be full, because reply is only ACK or NACK and previous acks have been received.
When you send the data, you should also get at some point that VaComm.WriteBufUsed gets back to zero when all bytes are transmitted. Do you see this? If some bytes are stuck in the VaComm write buffer, can there be some reason your receiver indicates it cannot longer accept more data?