... you're running this in Lisp through the layerstate-restore function? Or are you using something else?
AFAIK all Lisp calls are synchronous, thus the next item will only happen once the 1st has completed. In VBA you sometimes find asynchronous behaviour.
If you mean you ran a loop checking the CDate at each interval, then exiting the loop once reaching a specified period - that's probably not going to work. The issue is the loop itself is using up all the CPU time slicing allowed for the thread, so nothing else can actually do any work. If you mean you used the WAIT command, I'm not too sure why you'd even need to accomplish this - shouldn't the restore have completed before a command is allowed to be started? Sorry, I don't know of another way to pause Lisp - not without some external help (like a DotNet / ARX).
Anyhow, if your layer list is so long that the restore takes a meaningful time, you might want to use some object modified reactors on the layer names. This is probably total overkill, and is probably going to slow down the process even more, so I'd not recommend it.
Could you possibly post some code, so we can more easily find out what the issue might be?
Edit: Ohhhhh! Just realized you're on BricsCAD! It probably does an asynchronous version of Lisp! Ouch!
If this is the case, then it might be a good idea for the BC guys to add a call-back function to use when such async operation has completed.