I think the point you are missing is that tie acts on a container (a variable), but what you are returning is what's in the container, the value, which, as you note, triggers fetch. To put magic on a value,
you need overload, not tie.
Comment on Re: Delay evaluation of tied scalar when returned from sub