ran1978,
Eu acredito que o problema não está no XML e sim na ordem que realiza os procedimentos. Não sei bem como funciona no PHP, mas eu passei por algo semelhante nesta integração, pois quando eu lia o XML para transformar no base64 eu forçava o Encoding para UTF-8 pois se não o sistema questionava que o Encoding deveria ser UTF-8. Isso considerava como alteração de documento, e não validava assinatura. Como SOLUÇÃO, eu forcei o encoding para UTF-8 antes, assinei a nota e converti para base64 com encoding Default, e funcionou ok.
Passei pelo mesmo problema, pois em outras integrações não precisava realizar todos estes procedimentos, e essa em especial estava criticando isso, como no seu caso.