I see where you are going. Actually, there are other ways to do this. In essence, you are looking for votes on whether something is or is not duplicate. My question is whether you are explaining the problem correctly. (Yeah, I know, that's an awfully pretentious question, but then again, I'm know to be an awfully pretentious guy.)
Seems to me that if the invoice has been paid twice, you can't leave out anything as a consideration for identifying what was paid. If you did, how do you know it was paid for this invoice and not some other one? In other words, if you are going to manage payments, you need uniqueness of transaction. If you are not enforcing uniqueness of transaction, you are playing loose with fiduciary responsibility (to your clients). And if in accepting a payment you don't maintain adequate records in the first place to verify the status of the account and to track its payments, you are inviting problems.
MY problem is that from here, I wonder whether it is your explanation that is the problem or your business rules that are lax.
OK, if that seems even the least bit harsh, please note that from the outside it simply appears to be playing loosely with something that shouldn't be treated loosely in my book. It's your business and your business model, so if your explanation was right, then OK, that's the hand you've been dealt. But I just have conceptualization issues, I guess.
As to the issue of whether you have duplicate payments, I question the logic of how you determine duplication, since it seems as though in your "incomplete" match cases, you still don't know whether the payment was duplicated or applies to a different billing cycle or what it references. And finding an overlap in query A that is missing one factor will still not tell you whether an overlap in query B represents a duplicate payment.
You can treat this as "invoice defines the payment" or "month + account number defines the payment" or several other things that define a payment. But what you store must always remove any ambiguity regarding what really got paid. Otherwise, you will NEVER know who owes you what amount and when it is overdue.