Achei o problema.
Na função function _StrToSimNao, na unit pnfsNFSeR, retornava 1-Sim e 0-Não.
Mas na prefeitura (Curitiba, esqueci de mencionar antes) é := 1-Sim - 2-Não, conforme o xml gerado pela prefeitura e postado na mensagem original.
Alterei a função e deu certo. Também teste com a unidade que é optanteSimplesNacional e tb resultou em sucesso.
Não sei como vão fazer, pois parece que Curitiba fugiu do padrão.
Abaixo a função original comentada, e a corrigida.
{ function _StrToSimNao(out ok: boolean; const s: String): TnfseSimNao;
begin
result := StrToEnumerado(ok, s,
['1','0'],
[snSim, snNao]);
end;
}
function _StrToSimNao(out ok: boolean; const s: String): TnfseSimNao;
begin
result := StrToEnumerado(ok, s,
['2','1'],
[snSim, snNao]);
end;
Grato.