Please don't tell me I have to use coroutines

If you wanted to, you could simply use Connect instead of Wait and disconnect it afterwards, removing the need for a coroutine.

function startRoundGuardMove(whichGuard, guardBlock)
	local MoveConn = nil
	whichGuard.Humanoid:MoveTo(game.Workspace.firstDestination.Position)
	
	MoveConn = whichGuard.Humanoid.MoveToFinished:Connect(function()
		MoveConn:Disconnect()
		whichGuard.Humanoid:MoveTo(guardBlock.Position)
    end)
end