Olá jperim,
rapaz, não consegui reproduzir seu problema. Você consegue fazer o problema acontecer no DEMO do SPEDPisCofins?
Com respeito a problemas com arredondamentos, isso depende do que está usando e para qual objetivo. Currency por exemplo é apenas para dinheiro e trabalha com, no máximo, 4 casas decimais. Double tem uma possibilidade de mais casas, mas uma precisão menor. Isto é, as vezes, você está passando o valor 69,97 para um tipo Double. Mas na verdade, internamente ele é armazenado como 69.6700000000000017053025658242404460906982421875.
Eu já tive muitos problemas de arredondamento usando Double, de forma que hoje meu padrão para variáveis de ponto flutuante que não são dinheiro é Extended.
Pra quem quiser estudar mais a fundo, link para o artigo What Every Computer Scientist Should Know About Floating-Point Arithmetic (O que todo cientista da computação deveria saber sobre aritmética de ponto flutuante). E pergunta a "Como comparar double no Delphi?" no StackOverflow (também em inglês) http://stackoverflow.com/questions/6106119/how-to-compare-double-in-delphi