I doubt this is a bug with mIRC, I have a feeling that its following the standard IRC protocol, and that it doesn't account for network services options like +r and +R on channels.
From what I can tell "perform" list is executed first, because its sole purpose is to perform operations upon connecting, where as on connect is part of remote scripting, and scripts are executed second due to the fact that they are multipurposed and not just ment for one operation.
I could be wrong, however, logic would dictate that order as being the current used one. Possibly, this problem could be caused by that order.
Secondly, I have a feeling that Mardeg is right, the order is linear. The on joins do not seem to be executed seperately, independent of the event before it. I have a sneaking suspision that anything that would cause a halt in the code (waiting for user input) would halt the following events.