I know it's not a bug, here is a report explaining it's about hidden channel key etc..
But this is so wrong... Some of these have been mentioned in the thread:

Hidden channel key were not, and still isn't part of the rfc, it should never have been implemented just because 3-4 users were confused at the time, this implementation makes the life of others a pain, a scripter should never have to workaround his raw event 324/329 because it will trigger twice.
mIRC could be much much smarter about the way it does this, mIRC will send /mode again even if +k is not set, (I don't understand what Khaled is talking about with multiple mode key hidden, but unless one can give a network that is using what he is talking about, the second /mode should never be sent if +k isn't set).
But the main problem is that mIRC is failing to recognize on which network/ircd this is implemented. Take irc.rizon.sexy, it uses plexus-4(hybrid-8.1.20) as the ircd, this ircd doesn't have hidden channel key, why is mIRC sending /mode twice in here? (it's not doing it on unrealircd, but it should only do it on very specific ircd, rather than any other way)

So yeah, I would like to see the method for recognizing the network it's supposed to work on updated, this should only work on specific ircd supporting hidden channel key.
But it should also not do it on ircd supporting this, if +k isn't set.

Looking for a good help channel about mIRC? Check #mircscripting @ irc.swiftirc.net