looking at the gif, it seems as if the local position gets lost once it lerps to worldspace.
For this to work you need to keep the local position at all times.
So, if you're doing this:
HandPos = lerp(HandPos, FreePos, r);
It's not going to work once 'HandPos' has started drifting away, because you've then lost the local position.
You need to keep "HandPos" untouched by the lerp, and always keep it local.
You can debug this by having two particle renderers:
one that uses the real position you want, that gets lerped, etc.
and one that uses "HandPos" that follows the hand in localspace.
the effect should clearly draw two sprites, one that stays stuck on the model, no matter how many times you play with that attribute, and the other one that goes back and forth between local and world.
The localspace evolver doesn't apply the velocity of the parent game object.
So you'd have to expose a float3 attribute, and set it to the ingame velocity.
you can do mesh.sampleVelocity(pCoords) on a mesh attribute sampler, and get the surface velocity at that location on the surface, but it's the skinned mesh velocity without the game-object velocity applied either.(someone working with the Unity plugin please correct me if I'm wrong, as this is game-engine dependent AFAIK)
If that doesn't help, I'll need to see the actual effect to help you troubleshoot it