This is why I suspect it may be a bug. Note that in the example video I show I am using wine to run mIRC on a mac HOWEVER I have tested this on a native windows environment and it happens consistently on both.

Here is a video of me using the following code:
Code:
on *:TEXT:!testmsg:*:{
  var %i 0
  while (%i <= 20) {
    msg $chan %i
    inc %i
  }
}


http://i.gyazo.com/a9e9fcbe633f52efc039d2e5dbe3bd53.mp4

And here is a video (using 0 delay timers) to achieve the same thing but faster:

Code:
on *:TEXT:!testtimer:*:{
  var %i 0
  while (%i <= 20) {
    .timer 1 0 msg $chan %i
    inc %i
  }
}


http://i.gyazo.com/d2a18badf62af50bd2e6755e88a0c9e9.mp4

Notice how it does show up instantly on the mIRC window but doesnt seem to be sending it through instantly over the IRC socket? I will test to see if can make a fake IRC server to see what exactly mIRC is sending and when to double check its not something odd happening on the server side.