When FileZilla reports "Server refused public-key signature despite accepting key", I would assume that public key authentication actually failed, and that FileZilla proceeded to authenticate using only the password. Therefore, there was no public key authentication at all, which goes against your requirement to use dual authentication.
Also, there is no way to bypass 'signature errors' - if there was, that would be a very serious server-side vulnerability, because it would make it possible for anyone to authenticate using the public key only, which would completely defy the purpose. Key-based authentication uses asymmetric cryptography, where a proper signature is actually the proof that the user is in possession of the private key (without having to reveal the private key to the server).
I can provide advice on how to reproduce the behavior of FileZilla - that is, attempt dual authentication first, and if that fails, attempt password-based authentication only. If this is what you are looking for, let me know and I'll post the relevant code. However, I have to stress once more that this approach actually violates your requirement. Having the server fixed should be the preferred option.
Update: The following code tries dual (public key + password) authentication first, followed by only password-based authentication if it fails:
string userName = …;
string password = …;
SshPrivateKey key = …;
sftp.Connect(…);
try
{
// try key authentication, followed by password authentication
// (if requested by the server)
sftp.Login(userName, password, key);
}
catch (SftpException ex)
{
// determine whether the exception is an SSH authentication error
Exception innerEx = ex.InnerException;
if (ex.Status == SftpExceptionStatus.OperationFailure
&& innerEx is SshException
&& (string)innerEx.Data["ProtocolMessage"] == "AuthenticationCancelledByUser")
{
// try password authentication only
sftp.Login(userName, password);
}
}