Isn't there a simple way to determine when level streaming is finished?

Try this, it works on my side:

protected:
	UFUNCTION() void OnStreamLevelLoaded();

	enum EActionId
	{
		AID_Loading,
	};

	enum ELinkID
	{
		LID_Link
	};
...
        FLatentActionInfo LatentActionInfo;
		LatentActionInfo.UUID = AID_Loading;
		LatentActionInfo.CallbackTarget = this;
		LatentActionInfo.Linkage = LID_Link; // have to be not equal to INDEX_NONE, and probably should be void* to ExecutionFunction bindable params
		LatentActionInfo.ExecutionFunction = FName(TEXT("OnStreamLevelLoaded"));
		
		UGameplayStatics::LoadStreamLevel(GetWorld(), EnvironmentMap, true, true, LatentActionInfo);