So Gui’s default rotation is 0°, rotating it 360° means it’ll just be in the same position, there’s nothing to change in rotation so it just stays there. Sorry if I couldn’t explain correctly, basically what you are doing is tweening 0° to 0°.
Make sure the element you’re trying to rotate is not restricted by something like a sibling UIListLayout or any other element that affects its siblings.
I suggest placing the element you’re trying to rotate inside an identical one and rotate the child-element.
Like so:
(apply the tween to the child of icon, highlighted in blue)
Your code seems okay, I did not test it so I cannot confirm, but from what I can see it should loop fine.
Edit:
I created my own variant of the infinite spin, your code could be made a lot more effective like this:
local spinIcon = script.Parent
local spinInfo = TweenInfo.new(1, Enum.EasingStyle.Circular,
Enum.EasingDirection.InOut, -1, false, 0)
local spin = tween:Create(spinIcon, spinInfo,
{Rotation = spinIcon.Rotation + 360})
spin:Play()