Ítalo, alterei aqui e deu certo, o que fiz foi o seguinte, sempre que a TAG analisada for o <rem> a função rExtrai pega tudo que está entre <rem> e </rem> desta maneira traz tanto cnpj ou cpf do remetente quanto do local de retirada, e é isto que causa o problema, o que fiz foi o seguinte, se estou analizando a tag <cnpj> ou a tag <cpf> do grupo <rem>, porém a posição de início da tag for maior que 50, por exemplo, isto quer dizer que este cpf ou cnpj é do local de retirada e não do remetente, então neste caso eu jogo ConteudoTag:='', assim ele vai sair e passar novamente na função rCampo e vai analisar então o cpf, que então estará retornando corretamente.
Confira a linha de código que eu acrescentei na função rCampo
begin
Tag := UpperCase(Trim(TAG));
inicio := pos('<' + Tag + '>', UpperCase(FGrupo));
if inicio = 0 then
ConteudoTag := ''
//Alteração Daniel F. Dixini em 07/08/2013
Else IF ((Copy(FGrupo,1,5) = '<rem>') and (inicio > 50)) Then ConteudoTag := ''
else
begin
inicio := inicio + Length(Tag) + 2;
fim := pos('</' + Tag + '>', UpperCase(FGrupo)) - inicio;
ConteudoTag := trim(copy(FGrupo, inicio, fim));
end;