The terminology wallet.has_password is a bit confusing for hardware wallets. wallet.has_password() may return true for some hardware wallets, if it has an encrypted data file (wallet.has_storage_encryption() == True). But it cannot provide a master private key or the private keys to sign stakes (keystore.may_have_password() == False, which implies wallet.has_keystore_encryption() == False).
This fixes a confusing prompt for a password when an encrypted hardware wallet was about to sign stakes. The user then had to cancel the password dialog to proceed with stake signatures.