What I believe to be a bug is the fact that mIRC also opens up the /list window if you disconnect and it hasn't yet received a 321.
Okay. The behaviour is more clear now, I think. Yes, that is a bug. If 321 was not sent, no other event should cause the channels window to open (disconnect included). This is an extension of what I said earlier, though:
mIRC should probably only load up the window when it receives 321.
As you pointed out (which I was not aware of), mIRC already does this-- EXCEPT when you disconnect prior to 321 being sent. So the implementation is missing this exception case.