Has been a known issue up to jBPM 3.2.x (not sure if x=3 or something different) with nodes that directly go to the join (e.g. are no wait states) Please search the Jira and maybe find related patches that way that went into 3.2 that you can maybe backport to 3.1. if it is the same issue.
OK, I searched through JIRA.
I found two fixes that seem related to other problems we are having, but nothing that directly addresses this problem with the join node.
In 3.2/3.3 a token entering a join locks its parent node. There's a lot of discussion about this and it seems relevant, but in 3.1 there is no equivalent locking mechanism.
If anyone can supply some details about this, please chime in. I suspect this may also be causing StaleObjectStateException / cannot sync session errors we are seeing.