Вопрос снят.
Всё дело в невнимательности.
Кстати к теме про скользящие считывания данных:
count := count + SysComRead(port, ADR(buffer) + count, SIZEOF(buffer) - count);
В данном случае не имеет ни какого положительного влияния, читается сразу по 40 байт без проблем.