Hello again.
Since I wrote I think i have made some progress. I think it points at the same problem as you suggest but my approach is a bit different.
I have a single thread starting the process and then handlers are as above. I originally had an active transaction when starting the process and now I have ensured that this transaction is completed before starting the process. There is now no txn running when I call startProcess or completeWorkItem. I think this ensures that jbpm manages it's own transactions and things are looking up so far.
Does that make sense?
Thanks for your help.
Richard