Once the code is started, TycoonOwner only contains the value of OwnerValue as it appeared, but not as it will appear in the future. Putting OwnerValue.Value into a variable only copies the value to that variable. Eventually, when OwnerValue.Value is changed, OwnerValue still retains the previous owner, and it has to be changed.
e.g…
-- let's say, the contents of SomeStringValue before the script is loaded is "__noplayer"
local Username = SomeStringValue.Value -- What the script saw as it started
print(Username, SomeStringValue.Value) -- __noplayer __noplayer
-- at some point, a player joins and we assume it gets updated to the StringValue:
SomeStringValue.Value = "xe44444"
print(Username, SomeStringValue) -- __noplayer xe44444
-- Username must be updated:
Username = SomeStringValue.Value
print(Username, SomeStringValue) -- xe44444 xe44444
--
Consider only referencing the OwnerValue object itself, and every time you compare the player’s name to said object’s value, do TycoonOwner.Value == hit.Parent.Parent.Name.