Так и надо, чтобы сначала умножалось. Я проверил, если что.

Кстати для прикола вообще без ветвлений в один цикл переписал:
Код:
FOR j := 0 TO size * 8 - 1 DO
    crc := crc XOR arr[j / 8] * BOOL_TO_WORD(j MOD 8 = 0);
    crc := SHR(crc, 1) XOR (16#A001 * BOOL_TO_WORD(crc.0));
END_FOR
Тоже проверил. Компактнее, но медленнее (много бесполезного ксора с нулём).