I believe I found a nice modeling solution for what you've described. It required one little trick that only one of us developers would have known about, but other than that it is pretty straight forward.
To understand the solution you need to understand the following points about the inner workings of the Patient Destination (PD) field. This particular activity field is the only field that is automatically reevaluated on a somewhat continual basis. If the PD field returns NULL (i.e. 0) when it is evaluated, then the patient will stay where they are and do nothing until their PD field eventually is evaluated and returns a valid destination. The PD field will have a chance to be reevaluated for every released patient (whose destination variable is NULL) whenever a downstream location to the patient's current location BECOMES available. Now that last sentence is packed full of hard to digest information, but important information, so you may want to reread it a couple times.
So the one trick I needed to do was execute a "receiveitem(Chair1)" command in the Activity Started Trigger of the activity (#40) that determines whether the patient should go to Triage1, Chair1 or nowhere (i.e. PD = NULL). The reason for this is to force the PD's to be reevaluated on all patients currently in the Waiting Room before the PD field is evaluated on the patient who just took a seat in the Waiting Room. Without this trick, the patient who just barely enters the waiting room will sometimes jump ahead of other patients who have been waiting.
The only two non-standard things I did in this model were the PD and Activity Started Trigger fields on the "40_Escort to Triage or Chair" activity.
Let me know if this will work for you, and whether or not you need more explanation.
er-flow.fsm