JR>А какие у Вас настройки пула? Что возвращают ThreadPool.GetMinThreads, GetMaxThreads, GetAvailableThreads в нормальном состоянии и при проблемной ситуации?
Думаю, что эта информация вряд ли поможет. Поскольку проблема идентифицирована: расширяем количество потоков — увеличивается конкуренция (слишком много переключений контекста и т.п.), уменьшаем — уменьшается утилизация ЦПУ (поскольку много потоков просто в wait'е).
Нужен именно способ сказать WCF, что пока не выполнится этот wait — можешь использовать этот поток для обработки входящего запроса.