Выяснилось, что ошибка возникает при вызове функции PeekNamedPipe. Ошибка 233.
Я говорю товарищу, который писал серверную часть (а я писал клиентскую) -- давай проверим, что труба ещё работает. GetNamedPipeHandleState. Он пишет вызов. Вызов делается регулярно в моменты простоя процесса (OnIdle). Вызов возвращает FALSE! GetLastError возвращает 87 (неверный параметр; ненавижу эту ошибку, т.к. непонятно, что она значит). Но! Труба перестаёт отваливаться! То есть: добавление неработающей проверки состояния приводит к тому, что то, что раньше не работало, начало работать. Вот оно -- наблюдатель изменяет явление!
Потом вызов был переделан, чтобы он проходил успешно, но это уже ничего не изменило.
Я бы подумал, что серверная часть закрывает трубу по таймауту, однако ещё одна программа-сервер, написанная с помощью того же класса-обёртки, работает нормально, хотя она данные пересылает ещё реже, чем 1-я. И эта на других компах тоже работала!