Why is GetPlayerPawn returning an old pawn after using Open Level?

I’m using Open Level in the game instance blueprint to implement a bonus level system. It’s opening the level properly, and to the naked eye it is also possessing the default pawn properly. However when using GetPlayerPawn in my blueprint, I believe I’m momentarily getting the old pawn as no actions taken on it affect the new pawn. To get around this, I’ve been using a hard-coded delay to give the controller sometime to “settle” on the correct pawn. To debug this I implemented print statements so that any pawn prints “Possessed[displayname]” and “Unpossessed[displayname]” when possessed/unpossessed. To my surprise, even on initial play, there’s some weird possession going on:

This is the series of statements I get when initially playing the game.

This is what I get after using Open Level.

Is there a way to check if the controller has adequately settled in the pawn? Is there a way to get the new pawn instantly? Or is there something I may have incorrectly set to make the possession behave this way?

Basically, I feel like I’m not fully understanding what’s happening behind the curtain when using an Open Level node and it’s affecting my ability to access the correct pawn. An example of my current workaround is below.