I can't see the problem off the top of my head, but there's a huge amount of room for improvement:
alias adddir {
if (!$lines(mp3list.txt)) { did -r playlist 1 }
noop $findfile($sdir($mp3dir,Select a dir),*.mp3,0,write mp3list.txt $1-)
loadplaylist
}
Problems with yours:
1) You unnecessarily use $mircdir. Using just 'file.txt' is equivalent to '$mircdirfile.txt'
2) You unnecessarily use double quotes for filenames when passed to identifiers. Identifiers don't require filename parameters to be quoted, only commands do.
3) You loop with $findfile when it has built-in loop functionality, which is an absolutely huge more efficient method than looping with goto/while.
4) You use goto loops, which are awful and haven't been needed for many mIRC versions since mIRC now supports while loops.
5) You use global variables which you only need during the alias. You should use local variables.
6) Checking if ($lines() == 0) can be replaced with if (!$lines())