Work's perfectly fine the first time. In the 2nd time, it prints one of the 2 players is the only person surviving even though nobody died and ends the round.

function servercountdown()
	print("Server count down called.")
	-- Variables
	values = game:GetService('ReplicatedStorage').Values
	remote_events = game:GetService('ReplicatedStorage').RemoteEvents
	Countdown = remote_events.Countdown
	roundCountdown = remote_events.roundCountdown
	remoteRoundEnded = remote_events.roundEnded
	remoteRoundEndedPlr = remote_events.roundEndedPlr
	removeShopGUI = remote_events.removeShopGUI
	bringShopGUI = remote_events.bringShopGUI
	module = require(script.module)
	wait(1)
	interval = 1
	length = 30
	minimum = 0
	repeatdb = false
	coindb = false
	roundEnded = false


	roundDuration = values:FindFirstChild('roundDuration')
	roundMax = roundDuration.Value

	mapFolder = game:GetService('ReplicatedStorage').Maps

	-- Insert maps into table

	maps = {}

	for _,map in pairs(mapFolder:GetChildren()) do
		table.insert(maps,1,map)
	end
	
	print(#maps)
	
	-- Countdown script

	-- Intermission, round picking & teleporting
	wait(2)
	roundEnded = false
	if repeatdb == false then
		repeatdb = true
		for i = length,minimum,-1 do
			local intermissionTime = game:GetService('ReplicatedStorage').Values:WaitForChild('IntermissionTime')
			intermissionTime.Value = i
			Countdown:FireAllClients(i)
			wait(1)
			if roundEnded == true then
				break
			end
		end
		print("Intermission over!")
		wait(2)
		local map = maps[math.random(1,#maps)]

		map.Parent = workspace
		local players = game.Players:GetPlayers()
		module.TeleportAll(map.PrimaryPart)
		removeShopGUI:FireAllClients()
		
		for _,player in pairs(players) do
			inRound = Instance.new("BoolValue",player)
			inRound.Name = "InRound"
			inRound.Value = true
		end

		-- Round management, round ending, awarding
		for i = 120,0,-1 do
			wait(1)
			roundDuration.Value -= 1
			roundCountdown:FireAllClients(i)
			print(roundEnded)
			local plrcount = 0
			for _,player in pairs(game.Players:GetChildren()) do
				if player:FindFirstChild('InRound') then
					if player.InRound.Value == true then
						plrcount += 1
						print(plrcount)
						if plrcount == 0 then
							print("The player count is 0!")
						end
					end
				end
			end
			local playertable = {}
			for _,player in pairs(game.Players:GetChildren()) do
				table.insert(playertable,1,player)
				print(#playertable)
				if plrcount == (#playertable-1) and coindb == false and roundEnded == false then
					coindb = true
					print("Round ended due to 1 player only named "..player.Name)
					remoteRoundEndedPlr:FireAllClients(player)
					player.leaderstats.Coins.Value += 10
					game.ReplicatedStorage.Values.IntermissionTime.Value = 30
					game.ReplicatedStorage.Values.roundDuration.Value = 120
					workspace[player.Name].HumanoidRootPart.CFrame = workspace.SpawnLocation.CFrame
					player.InRound:Destroy()
					repeatdb = false
					print("Round ended")
					map.Parent = game.ReplicatedStorage.Maps
					for _,gunplr in pairs(game.Players:GetChildren()) do
						local lasergun = gunplr.Character:FindFirstChild("Laser Gun") or gunplr.Backpack:FindFirstChild("Laser Gun")
						if not lasergun then
							print("Laser gun not found, couldn't destroy.")
						else
							lasergun:Destroy()
						end
					end
					roundEnded = true
					coindb = false
					repeatdb = false
					playertable = {}
					plrcount = 0
					bringShopGUI:FireAllClients()
					for _,player in pairs(game.Players:GetChildren()) do
						if player.InRound then
							player.InRound:Destroy()
						end
					end
					break
				end
			end
			for _,player in pairs(game.Players:GetChildren()) do
				if player:WaitForChild("InRound") then
					inRound = player.InRound
					workspace[player.Name].Humanoid.Died:Connect(function()
						inRound.Value = false
						local lasergun = workspace:WaitForChild(player.Name):FindFirstChild("Laser Gun")
						if lasergun then
							workspace[player.Name].Humanoid:UnequipTools()
						end
						bringShopGUI:FireAllClients()
					end)
				end
			end

			if roundDuration.Value == 110 then
				for _,player in pairs(game.Players:GetChildren()) do
					if player:WaitForChild("InRound").Value == true then
						local gunclone = game.ReplicatedStorage["Laser Gun"]:Clone()
						gunclone.Parent = player.Backpack
					end
				end
			end
			if roundDuration.Value == 0 then
				game.ReplicatedStorage.Values.IntermissionTime.Value = 30
				game.ReplicatedStorage.Values.roundDuration.Value = 120
				for _,player in pairs(players) do
					if player.InRound then
						player.InRound.Value = false
						repeatdb = false
						print("Round ended")
						map.Parent = game.ReplicatedStorage.Maps
						workspace[player.Name].HumanoidRootPart.CFrame = workspace.SpawnLocation.CFrame
						roundEnded = true
						for _,gunplr in pairs(game.Players:GetChildren()) do
							local lasergun = gunplr.Character:FindFirstChild("Laser Gun") or gunplr.Backpack:FindFirstChild("Laser Gun")
							if not lasergun then
								print("Laser gun not found, couldn't destroy.")
							else
								lasergun:Destroy()
							end
						end
						remoteRoundEnded:FireAllClients()
						plrcount = 0
						bringShopGUI:FireAllClients()
						for _,player in pairs(game.Players:GetChildren()) do
							if player.InRound then
								player.InRound:Destroy()
							end
						end
						break
					end
				end
			end
		end
		
	end
end

servercountdown()

while wait() do
	
	if roundEnded == true then
		roundEnded = false
		wait(2)
		print("Restarting!")
		servercountdown()
	end

end