The issue is that you have three different things looking at the inbox of your Gmail account on Google's servers, but don't check it at the same frequency.
The Gmail client is just the local representation of your Gmail inbox as the server has it. Every once in a while it needs to reach back to check for changes in your inbox so that it knows it needs to download information and change what it's showing. It's not instant. How often "once in a while" is isn't documented, but it's probably not more than a couple of minutes. I'll wager that if you're a person who gets a lot of mail frequently it's probably checked more often than someone who doesn't get mail as often.
Further, the Gmail Mail Checker and desktop notifications are also looking at the server, not the Gmail client in the browser. And, obviously, they're not on the same schedule as the Gmail client. How could they be?
One way to fix this would be to have them all checking much more frequently, say several times a second. Then they'd all show the same change virtually instantly. The problem is that every check requires a network connection back to the server. That requires bandwidth and processing power at the server. Granted, very little in the scheme of things, but Gmail has millions of users. Those little connections will add up. Especially when 99.999% of the time there will be nothing new to report.
So I'd suggest you have a bit of overkill there. If you always have the Gmail client open, you don't need the mail checker or the desktop notifications. The latter two are only useful if you don't always have Gmail open, but they fill the same niche. The mail checker is a better option for people whose browsers don't support desktop notifications.
If the occasional discrepancy bothers you that much, then reduce the number of things you're checking. If (like me) you absolutely, positively, do not want to miss that important email message when it comes in and prefer to have redundant systems, then just relax and accept that every once in a while the three local clients aren't going to be in sync. (In that case, just wait a few minutes and things should work out.)