Sim estava testando com senhas diferentes e sempre é solicitado o PIN.
Fiz mais alguns testes:
Testando com outro cartão, esse da Oberthur, que permite ativar um log dos acessos ao certificado descobri mais umas coisas:
Após cada transação, o hardware do cartão é reiniciado como pode ser visto abaixo;
2017-11-03 16:03:10.240 (TID=9840) DEBUG [PCSCReader.cpp:83] SCardEstablishContext (0000)
2017-11-03 16:03:10.260 (TID=9840) DEBUG [PCSCReader.cpp:430] begin Transaction
2017-11-03 16:03:10.266 (TID=9840) DEBUG [PCSCReader.cpp:94] POWER_ON
2017-11-03 16:03:10.585 (TID=9840) DEBUG [PCSCReader.cpp:107] SCardConnect on reader ACS CCID USB Reader 0 (0000)
2017-11-03 16:03:10.595 (TID=9840) DEBUG [PCSCReader.cpp:629] APDU 00 A4 04 0C 10 A0 00 00 00 77 01 08 00 07 00 00 FE 00 00 01 00
2017-11-03 16:03:10.665 (TID=9840) DEBUG [PCSCReader.cpp:677] Return :90 00
2017-11-03 16:03:10.665 (TID=9840) DEBUG [PCSCReader.cpp:629] APDU 00 A4 04 0C 0D E8 28 BD 08 0F F2 50 4F 54 20 41 57 50
2017-11-03 16:03:10.695 (TID=9840) DEBUG [PCSCReader.cpp:677] Return :90 00
2017-11-03 16:03:10.695 (TID=9840) DEBUG [PCSCReader.cpp:520] end Transaction
2017-11-03 16:03:10.698 (TID=9840) DEBUG [PCSCReader.cpp:239] POWER_OFF
2017-11-03 16:03:10.702 (TID=9840) DEBUG [PCSCReader.cpp:260] SCardDisconnect (0000)
Demora um tempo para essa "reinicialização" acontecer, e caso seja chamado o método createKeyFromCSP ou createKeyFromCertContext da MSXML5.dll durante esse intervalo, algum bug nessa DLL faz com que uma chamada para exclusão do conjunto de chaves seja feita ao hardware do cartão, como pode ser visto mais abaixo:
2017-11-03 16:03:10.702 (TID=9840) DEBUG [PCSCReader.cpp:260] SCardDisconnect (0000)
2017-11-03 16:03:10.704 (TID=9840) [OcsCsp.cpp:245] CPAcquireContext returned ERROR 0x80090016
2017-11-03 16:03:10.708 (TID=9840) [OcsCsp.cpp:166] AcquireContext (container "{2E6C5A0A-2AE2-7ff6-D224-EA19FB355731}", flags CRYPT_DELETEKEYSET 0x00000010)
Nesse momento o gerenciador do cartão solicita o PIN e caso o usuário digite o certificado é excluído.
Essa DLL é a que usamos para a assinatura dos XMLs, ela é da Microsoft, faz parte do office e na sua versão mais atual, a MSXML6 não tem mais suporte a assinatura de XMLs, portanto é muito provável que não haverá qualquer correção ou suporte nessa DLL por parte da Microsoft.
Notei que a Oberthur já contornou o problema: Na nova versão 5.1.8 SR1 do AWP Manager é exibida uma mensagem de "Acesso Negado" no momento da tentativa de exclusão e o certificado não é excluído. Testei o gerenciador da Safesign e mesmo na versão mais atual o certificado foi excluído, inclusive certificados armazenados em tokens USB.
Estou trabalhando em uma Unit de assinatura que usa somente a MSCRYPTO, assim que terminar vou disponibilizar aqui, precisarei de ajuda para testá-la e quem sabe assim se livramos da MSXML5 e conseguimos conviver em paz com os A3.