The exception data written by the Server is lost and the client (test code) receives a generic connection aborted error.
My guess is the Server is triggering a JVM bug when it writes the exception data and then closes the socket. Instead of the data being flushed to the peer the TCP connection is closed abortively. To check this hypothesis I added a small sleep (20ms) after writing the exception data to the SocketChannel and before closing the socket. This makes the error go away.
No good ideas on how to fix it yet.