Your problem actually revolves aroudn the fact that mIRC keeps it's own IAL and the fact that the IAL doesn't update immediately when a person leaves a room (whether it be via part, kick or quit). One way around this (although not ideal) is to force the ial to update when someone does one of those.

ie: on *:part:#:{ ialclear $nick }