I have made an intermission system, and it works when it's only one player, however, when there are two+ players, it gets stuck on intermission after the first round.

Server:

    local DSS = game:GetService("DataStoreService")
    local TotalWinsStore = DSS:GetDataStore("BETAWins")
    local TotalKillsStore = DSS:GetDataStore("BETAKills")
    local TimeLeft = 20
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local GUIChanger = ReplicatedStorage:WaitForChild("GUIChanger")
    local GUIChangerTwo = ReplicatedStorage:WaitForChild("GUIChangerB")
    local GUIChangerThree = ReplicatedStorage:WaitForChild("GUIChangerC")

    wait(1)

    game.Players.PlayerAdded:Connect(function(p)
    	local leaderstats = Instance.new("Folder", p)
    	leaderstats.Name = "leaderstats"
    	local TotalWins = Instance.new("IntValue", leaderstats)
    	TotalWins.Name = "Wins"
    	TotalWins.Value = 0
    	local TotalKills = Instance.new("IntValue", leaderstats)
    	TotalKills.Name = "Total Kills"
    	TotalKills.Value = 0
    	local RoundKills = Instance.new("IntValue", leaderstats)
    	RoundKills.Name = "Round Kills"
    	RoundKills.Value = 0
    	local Playing = Instance.new("BoolValue", p)
    	Playing.Name = "Playing"
    	Playing.Value = false
    	
    	local data
    	local dataII
    	local success, errormessage = pcall(function()
    		data = TotalWinsStore:GetAsync(p.UserId.."-wins")
    		dataII = TotalKillsStore:GetAsync(p.UserId.."-kills")
    	end)
    	
    	if success then
    		p.leaderstats["Wins"].Value = data
    		p.leaderstats["Total Kills"].Value = dataII
    		print("Data saved!")
    	else
    		warn(errormessage)
    		print("Error while loading data!")
    	end
    end)

    game.Players.PlayerRemoving:Connect(function(p)
    	local success, errormessage = pcall(function()
    		TotalWinsStore:SetAsync(p.UserId.."-wins", p.leaderstats["Wins"].Value)
    		TotalKillsStore:SetAsync(p.UserId.."-kills", p.leaderstats["Total Kills"].Value)
    	end)
    	
    	if success then
    		print("Success!")
    	else
    		warn(errormessage)
    		print("Error while saving data!")
    	end
    end)

    while true do
    	repeat
    		wait(1)
    		TimeLeft = TimeLeft - 1
    		GUIChanger:FireAllClients(TimeLeft)
    	until TimeLeft == 0
    	
    	wait(2)
    	
        for i,v in pairs(game.Players:GetPlayers()) do
            spawna = game.Workspace.A
            spawnb = game.Workspace.B
            spawnc = game.Workspace.C
            spawnd = game.Workspace.D
            spawne = game.Workspace.E
            
            local spawns = {spawna, spawnb, spawnc, spawnd, spawne}
            local random = math.random(1, #spawns)
            local picked = spawns[random]
            
            v.Playing.Value = true
            
            v.Character.HumanoidRootPart.Position = picked.Position
            wait(0.1)
        end
        
        GUIChangerTwo:FireAllClients()
        
        local alldead = false
        while alldead == false do
            wait()
            local allpdead = true
            for i,v in pairs(game.Players:GetPlayers()) do
                if v.Playing.Value == true and v.Character.Humanoid.Health > 0 then
                    allpdead = false
                end
            end  
            if allpdead then
                alldead = true
                break
            end
        end
    	
    	function higherScoreThan(playerA, playerB)
        	return playerA.leaderstats.Score.Value > playerB.leaderstats.Score.Value
    	end


    	local players = {}
    	for _, player in pairs(game.Players:GetPlayers()) do
        	if player:FindFirstChild("leaderstats") and player.leaderstats:FindFirstChild("Round Kills") then
            	table.insert(players, player)
        	end
    	end

    	table.sort(players, higherScoreThan)

    	if players[1] then
    		local Winner = players[1].Name
    		GUIChangerThree:FireAllClients(Winner)
    		players[1].leaderstats["Wins"].Value = players[1].leaderstats["Wins"].Value + 1
    	end
    	
    	for i,v in pairs(game.Players:GetPlayers()) do
    		v.leaderstats["Total Kills"].Value = v.leaderstats["Total Kills"].Value + v.leaderstats["Round Kills"].Value
    		wait(0.5)
    		v.leaderstats["Round Kills"].Value = 0
    	end
    	
    	wait(6)
    	
    	TimeLeft = 20
    end

Client:

     local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local GUIChanger = ReplicatedStorage:WaitForChild("GUIChanger")
    local GUIChangerTwo = ReplicatedStorage:WaitForChild("GUIChangerB")
    local GUIChangerThree = ReplicatedStorage:WaitForChild("GUIChangerC")

    local function Change(TimeLeft)
    	local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
    	TextLabel.Text = " - Intermission ("..TimeLeft..") - "
    end

    local function ChangeTwo()
    	local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
    	TextLabel.Text = " - Round in Progress - "
    end

    local function ChangeThree(Winner)
    	local TextLabel = game.Players.LocalPlayer.PlayerGui.Intermission.TextFrame.TextLabel
    	TextLabel.Text = " - Round Winner: "..Winner.." - "
    end

    GUIChanger.OnClientEvent:Connect(Change)
    GUIChangerTwo.OnClientEvent:Connect(ChangeTwo)
    GUIChangerThree.OnClientEvent:Connect(ChangeThree)

No errors.