Mike
In a WebApp, which this is, when you send a message like ShowYesNo, which requires the user to interact on the client, that message is queued until the current request completes. When that happens (i.e. on the End_Procedure here), all the queued messages are sent to the client, including WebSet psValue and pLoadClient. I don't think the framework makes any guarantees about the order those queued messages get executed on the client.
When you use a message like SendShowYesNo, you need to stop there, then pick up again in pParentSaveConfirm, depending on their response.
So in the Begin/End I'd add a Procedure_Return (and also add the lines after it to pParentSaveConfirm).
It just doesn't work quite like Windows. It isn't actually multi-threading, but there are two different processes involved (probably on two entirely different machines in a production situation) - the one on the server and the one on the client (i.e. the browser), so on a high-level, yes, it kind of looks like multi-threading.
If this isn't clear, say so and I'll try to give you a fuller explanation.
Mike