I finally found a solution, I am not sure if it is correct or where it is documented but the IsTickable() method needs to be overridden and it needs to return false until after the call to Initialize().
For some reason if IsTickable() always returns true which is the default in the FTickableGameObject class then the tick registration gets run twice.