eu identifiquei o seguinte:
No código abaixo o valor retornado será R$ 0,99 (diferente do SAT)
var
currValorUnit : currency;
currQtde : currency;
currTotal : currency;
begin
currValorUnit:=0.99;
currQtde:=0.995;
currTotal:=ACBrUtil.RoundABNT(currValorUnit * currQtde, 2);
end;
O valor final da variável currTotal será apresentado como 0.99, e como estava comparando pelo calculado pelo SAT, o valor não bate. Aparentemente, pelo que observei é porque a variável que a funcção RoundABNT recebe é um double, e o valor passado para a função é 0.98505.
Então implementei a situação de outra forma, conforme abaixo:
var
currValorUnit : currency;
currQtde : currency;
currTotal : currency;
begin
currValorUnit:=0.99;
currQtde:=0.995;
currTotal:=currValorUnit * currQtde;
currTotal:=ACBrUtil.RoundABNT(currTotal, 2);
end;
Neste caso o valor de currTotal será 0.98 (R$ 0,98), assim como no retorno do SAT. O valor passado para a função RoundABNT neste caso, como é uma variável do tipo currency, será 0.9850. Pelo que observei com este teste, o SAT também faz cálculos com variáveis de até 4 casas decimais, como é o caso do currency do Delphi.
E o caso foi sanado desta forma.