Ok, I isolated the behaviour and stripped it down to one line of code.
The EntityControl will maintain a target as expected, if :GetTarget() is called again, prior to LocalPlayer changing target.
The EntityControl loses the connection to the target the next time LocalPlayer changes target, with this call order:
Code:
local Target = LocalUser:GetTarget()
self.TargetSelection:SetEntity( Target )
It will maintain a connection, when this is done:
Code:
self.TargetSelection:SetEntity( LocalUser:GetTarget() )
local Target = LocalUser:GetTarget()
Neat