Никто не ответил, придется самому себе отвечать
Предыдущий пост написал, а через полчаса в голову пришла бредовая идея, которая оказалась правильной.
ИАР своеобразно трактует термин начальное значение CRC. В хелпе по линкеру на опцию -J сказано:
Цитата
init
By default, the initial value of the checksum is 0. If you need to change the initial value, supply a different value for init.
Однако, если изменить это значение, например на FFFF, то линкер действует так:
1. Очищает начальное значение CRC = 0;
2. Производит вычисление CRC по стандартному алгоритму для нужного полинома для 2 байт со значением 0xFF;
3. Начинает вычислять CRC для заданного диапазона памяти.
Разумеется, значение CRC после шага 2 совсем не равно FFFF.
Ну и полученная окончательная CRC не имеет ничего общего с тем, что ожидалось.