Ok, so the issue seems to be that there is a behavioral difference between the client(listen server?) running in the editor window, and the client running in the popup window during PIE.
In the Editor window, the call to UAblAbilityComponent::ActivateAbility call ends up activating the ability server side first, because it takes the code path for authoritative
// We're authoritative. Start the Ability.
Result = InternalStartAbility(Context);
While the client in the popup window functions as you describe, where it’s not authoritative, so it sends the ServerActivateAbility RPC and then starts the ability locally, which activates the abilities in the ‘proper’ order of client then server.
How do you handle this inconsistency in PIE ?