Wrong Scene (Persistent) Loading

Hello, I’m trying to make a fade in/fade out transition between scenes. My code is heavily based off of the Unity 5.5 Game State video. The only issue is that the scenes do not load properly. My setup consists of a Persistent scene, and three others. Only two are loaded at the same time (Persistent and one other). When I start the game in the Editor, the first couple of times, whenever I switch scenes, it takes me to the Persistent scene, then if I do it again, to the correct scene. My Debug statements show that the correct scene is active, but I assume at some point, it gets unloaded, and I’m defaulted back to the Persistent scene. I’ll try to keep my code brief and only show the relevant stuff, although, I suppose that’s most of it, haha.

using System;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
public class SceneController : MonoBehaviour
{
	public event Action BeforeSceneUnload;
	public event Action AfterSceneLoad;
	public CanvasGroup faderCanvasGroup;
	public float fadeDuration = 1f;
	public string startingSceneName = "Level1"; 
	public string initialStartingPositionName = "OldDudeCharacter";
	public SaveData playerSaveData;

	private bool isFading;
	private IEnumerator Start ()
	{
		faderCanvasGroup.alpha = 1f;
		playerSaveData.Save
		(PlayerController.startingPositionKey,initialStartingPositionName);
		yield return StartCoroutine (LoadSceneAndSetActive (startingSceneName)); //Initial load. Works well.
		StartCoroutine (Fade (0f));
	}

//The problems occur when I run this function

	public void FadeAndLoadScene (string sceneName)
	{
		if (!isFading)
		{
			StartCoroutine (FadeAndSwitchScenes (sceneName));
		}
	}
	private IEnumerator FadeAndSwitchScenes (string sceneName)
	{
		yield return StartCoroutine (Fade (1f));
		if (BeforeSceneUnload != null)
			BeforeSceneUnload ();
		yield return SceneManager.UnloadSceneAsync (SceneManager.GetActiveScene ().buildIndex);
		yield return StartCoroutine (LoadSceneAndSetActive (sceneName));
		if (AfterSceneLoad != null)
			AfterSceneLoad ();
		Debug.Log (SceneManager.GetActiveScene().name); //This outputs correctly!!!
		yield return StartCoroutine (Fade (0f));
		Debug.Log (SceneManager.GetActiveScene().name); //This outputs the Persistent scene! Wrong!
	}
	private IEnumerator LoadSceneAndSetActive (string sceneName)
	{
		yield return SceneManager.LoadSceneAsync (sceneName, LoadSceneMode.Additive);
		Scene newlyLoadedScene;

//I added this for when scenes are loading, there are periodically 3. The issue may lie here.

		if (SceneManager.sceneCount == 3) 
			newlyLoadedScene = SceneManager.GetSceneAt (SceneManager.sceneCount - 2);
		else
			newlyLoadedScene = SceneManager.GetSceneAt (SceneManager.sceneCount - 1);
		SceneManager.SetActiveScene (newlyLoadedScene);
	}
	private IEnumerator Fade (float finalAlpha)
	{
		//Irrelevant
	}

	//Tests for the transitions.

	public void Update(){
		if (Input.GetKeyDown ("0"))
			FadeAndLoadScene("Level1");
		else if (Input.GetKeyDown ("1"))
			FadeAndLoadScene("Level2");
		else if (Input.GetKeyDown ("2"))
			FadeAndLoadScene("VoidLevel");
	}
}

Any help would be greatly appreciated!

You can check for Simple Fade Scene Transition on asset store to help you with more tools. You can check also the official API from Unity about it!

Fade Scene API