Olá,
encontrei o problema.
De acordo com a documentação do Lazarus (https://wiki.lazarus.freepascal.org/For#Loop_Completion), e do Delphi (https://docwiki.embarcadero.com/RADStudio/Sydney/en/Declarations_and_Statements_(Delphi)#For_Statements) a variável do FOR tem valor indefinido ao final do loop. Ela só tem valor definido caso o FOR tenha sido interrompido com um BREAK.
Neste caso, é prudente usar o WHILE para garantir o valor da variável ao final do loop.
Substituí o FOR por WHILE nos códigos em anexo que devem tornar o comportamento previsível em todos os compiladores/plataformas.
ACBrBancoSofisaSantander.pas
ACBrBancoSofisaItau.pas
ACBrBancoSofisa.pas