why did this work
local part = game.ReplicatedFirst.Part:Clone() part.Parent = game.Workspace
but this didn't?
local part = game.ReplicatedFirst.Part:Clone(game.Workspace)
That's because you didn't tell the script where to clone it like the parent. In order for it to work you must say the parent of it like
local part = game.ReplicatedFirst.Part:Clone().Parent = game.Workspace
Clone does not take any arguments so the second script would simply clone it then leave its parent as nil