Boa tarde,
Eu procedo de forma diferente, a minha aplicação é que gera o código aleatório e atribui ao campo: CTe.ide.cCT, desta forma nunca tive problemas com a chave.
Outro detalhe na tabela do banco de dados que utilizo para armazenar os dados do conhecimento, é salvo também o código aleatório, a chave completa (com o código aleatório e digito verificador), data de emissão, numero do protocolo de autorização, data de cancelamento, justificativa, protocolo de cancelamento, claro se ocorrer o cancelamento.
Uma duvida:
Após alimentar o componente com os dados, esta sendo executado apenas o comando Enviar ou esta sendo executado os comandos: Assinar, Validar e Enviar ?
O comando Assinar, gerar o XML (inclusive a chave) assina e salva em disco.
O comando Validar, executa o comando Assinar e depois valida o XML gerado.
O comando Enviar, executa os comandos Assinar e Validar e depois gera o lote e o envia, se a sefaz não rejeitar, o XML assinado recebe o protocolo de autorização e o DANFe é impresso no papel.