I have created a placement system and this worked without any problems, however, I tried when loading the Playerbase to add a standard rotatio which makes it possible to change the orientation of all the objects of a player base at once. However, I came across a problem here. When loading the rotated player base sometimes all the objects move by 0.5.

This is my loading function:

function loadPlayerData(player, dataTable, Base)
	
    if dataTable ~= nil then
		
		for _, object in pairs(dataTable["PlacedObjects"]) do

			if object["Name"] ~= "Anchor" then
			
				local Model = game.ReplicatedStorage.PlaceableObjects:FindFirstChild(object["Name"]):WaitForChild("PlacedModel"):Clone()
				Model.Name = object["Name"]
				
				Model.Parent = Base.PlacedObjects
			    Model:SetPrimaryPartCFrame(Base.Grid.CFrame + Vector3.new(object["XPos"], object["YPos"], object["ZPos"]))
			
				Model.Rotation.Value = object["Rotation"] + game.Workspace:WaitForChild(player:WaitForChild("PlayerSystem"):WaitForChild("Values").PlayerBase.Value).Settings.BaseRotation.Value
				Model:SetPrimaryPartCFrame(Model:GetPrimaryPartCFrame() * CFrame.Angles(0, math.rad(object["Rotation"]),0))
			
			end
				
		end
		
		local PlacedObjectsModel = game.Workspace:WaitForChild(player.PlayerSystem.Values.PlayerBase.Value).PlacedObjects

PlacedObjectsModel:SetPrimaryPartCFrame(PlacedObjectsModel:GetPrimaryPartCFrame() * CFrame.Angles(0, math.rad(Base.Settings.BaseRotation.Value) ,0))

	end
end

And this is my save function:

function generateDataTable(player, Base)
	
	local PlacedObjects = {}
	
	local TempObject = Base.PlacedObjects:Clone()
	local cframe = TempObject.PrimaryPart.CFrame
	TempObject:SetPrimaryPartCFrame(cframe * CFrame.Angles(0, math.rad( - Base.Settings.BaseRotation.Value), 0))
	
	for _, object in pairs (TempObject:GetChildren()) do
		
		if object.Name ~= "Anchor" then
		
			local vector,axis = object:GetPrimaryPartCFrame():toAxisAngle()
	        local pos = object.PrimaryPart.Position - Base.Grid.Position
			table.insert(PlacedObjects, {
				["Name"] = object.Name,
				["XPos"] = pos.X,
				["YPos"] = pos.y, 
				["ZPos"] = pos.z, 
				["Rotation"] = object.Rotation.Value - Base.Settings.BaseRotation.Value})
		
		end
		
	end
	
	
    local dataTable = {
		["PlacedObjects"] = PlacedObjects
	
}

	TempObject:Destroy()
    return dataTable

end