Yep, each taskinstance gets a copy of the processvariable at the moment the task is created. The behaviour was different in 3.0
If you do not want tasklocal variables, just don't include them. The taskinstance has access to the process variables as well (at least in cvs-head, but afaik in 3.1 as well). The thing is that the forms do not know this, so if you want to use this in the jbpm forms, you have to do some work yourself. Or build your own webapp.
i cannot see the value of using task local variable. It incurs lots of db IO.