Repeating a value changing script not working

I am trying to make a script that changes the value of a StringValue in the player in a folder, with the StringValue’s value being the value of a StringValue inside of a frame, and it works, but when the StringValue in the frame changes from what it was when the script started running, the value in the player folder doesn’t change and stays as the value in the frame when the script originally started running.

game.Players.PlayerAdded:Connect(function(Player)
	repeat 
		wait(3)
		local PlayerFolder = Player:WaitForChild("Folder")
		local FrameValue = Player.PlayerGui["Player Gui"].Frame.ValueHoldingFrame.Value
		PlayerFolder.StringValue.Value = FrameValue.Value
		local Test = FrameValue.Value
		print(Test)
		until game.Workspace.Sound == nil
	end)

How does one fix this so that PlayerFolder.StringValue.Value also changes to FrameValue when it becomes different from how it started when the script originally began running?

Example:

Start:

--FrameValue = Test
--Player.StringValue.Value = Test

FrameValue Change:

--FrameValue = Test2
--Player.StringValue.Value = Test

(Note: The same problem occurs with while true do, and I have a sound in workspace)

Use GetPropertyChangedSignal.

Hub resource:
https://developer.roblox.com/en-us/api-reference/function/Instance/GetPropertyChangedSignal