O grande problema ai, entendo eu que seja a duplicidade.Sofri muito com isso, trato minha rotina assim :
- envio a nota, caso não retorne nada, o cliente vai novamente clicar no botão enviar, vai dar a duplicidade, internamente, sem o cliente saber, verifico se o código de erro é duplicidade, se for, consulto a nota, pego o protocolo de autorização e gravo no banco de dados.
- caso ele tente enviar, e não consiga, mude os dados e tente de novo, vai dar erro de duplicidade com diferença da chave de acesso, dai consulto a nota pela chave de acesso (a primeira) e salvo esse XML, e não o segundo XML.
Observe que, se der duplicidade, não pode deixar na mão do usuário "decidir" o que fazer, nesse seu caso, consultar pelo XML ou pela chave. Outro ponto, não pode deixar em aberto, para seu cliente, consultar o protocolo pelo XML, ele vai cometer o erro que aconteceu com vc dessa vez...
Espero ter ajudado..abraço.