Hey,
Not really sure of what is happening with this method, but it doesn't sound right. E.g. when simply doing
env.gain.cancelAndHoldAtTime(now);
env.gain.linearRampToValueAtTime(0, now + releaseDuration);
we can ear a strange drop rather than a clean fade out, sounds like the linear ramp doesn't start from the right value.
I will have a closer look as soon as possible (... and happy new year :)