Old post, I know, but I’ve been working on this exact issue the last few days.
My solution was to create a custom ALevelScriptActor for any level I want to be saveable. Override BeginPlay, then after Super::BeginPlay(), put your loading code.
Still feels very hacky, but the player controller & pawn are spawned, would work across multiple game modes etc.