В общем, проблема оказалась в применяемом компоненте для работы с COM портом - TLazSerial. В начале, когда программы были несложные и работали только в одном потоке, проблема не проявлялась. Но с нарастанием сложности проектов, с увеличением количества одновременно задействованных портов, с применением нескольких потоков зависания проявлялись всё чаще и чаще. Как я понял, у этого компонента проблемки с согласованием работы в разных потоках, и он периодически просто ловит клина. Применение критических секций так же не давало никакого эфекта.
Решением стал отказ от TLazSerial, и переход на компонент TComPort. Адаптация прошла максимально безболезненно. Так что, если у Вас проявляется подобный эффект, попробуйте такое решение.