Assuming that Eyes is a part parented to FakeHead, your error is likely that the game has not yet registered all the children of FakeHead at the time it is attempting to index it. You could fix this by using :WaitForChild() for all the children you will be accessing before entering the spawned while loop.
local thing = Player.Character:WaitForChild("FakeHead")
local eyes = thing:WaitForChild("Eyes")
local socket = thing:WaitForChild("Socket")
spawn(function()
--The rest of your code here
end)
There was a post mentioning some changes to :WaitForChild() in Updates/Announcements just a few days ago. It might be worth a read as it summarizes pretty well what you can (and more importantly cannot) assume about children after calls to :WaitForChild().
Probably that the texture needs to be reloaded every time you reset its Texture property. Instead of toggling between different asset IDs in the Texture property of one object you could toggle between two objects which already have the Texture property set to each of the states you wish to toggle between. Then just toggle between the first being visible while the second is invisible and vice versa.