Без кода сказать можно мало что. Если есть возможность залить на гитхаб, то шансов стало бы больше. Есть 3 подозрительных момента:
Для каждого сообщения создаётся новый объект SocketOutputStream
А нужно ли это? Почему бы не использовать этот stream все время пока живет сокет?
создание SocketOutputStream окружено Poco:Mutex
Попадает ли непосредственно запись в стрим и flush(деструктор) под этот mutex?
использую классы SocketOutputStream, чтобы избавиться от ручного управления буферами, хвоставми и т.д. и т.п.
Насколько я успел понять по документации этот класс ничего не знает про границы сообщений. Это примерно такой же стрим как и для записи в файл. Поэтому если размер сообщений может быть разный, то надо смотреть как вы вычитываете данные.
По отладке сетевого кода могу посоветовать логирование вместо отладчика.