Thanks: idling away some slack time if taxis returns too quickly seems to do the trick. I knew the sim would take longer with larger numbers of lice, the problem was mostly that with a small population and the simple while loop, the lice looked like they were on amphetamines! The only change I have made is to use...
DoOneEvent( DONT_WAIT ) until Time::HiRes::time-$start > MIN_REFRESH;
Since DoOneEvent() alone frequently takes longer than 20 ms to return, and therefore the sim gets very jerky with small populations.