the issue is the default transaction syncronizer implementation relies on a token-based mechaism, where the token is managed in flow scope. this works fine for default sessino storage, but does not work when using continuations.
if you use continuations, you'll have 1 copy of the flow execution per request -- so there is no concept of a token here stored in a single, centrally managed flow execution. So for example, if I end the transaction in the last step of the flow, that clears the token for 1 copy only... if you refer to history, it'll be back and now you've got a duplicate submit.
In this case you need a custom TransactionSynchronizer impl that plays well with continuations and does not rely on flow scope (perhaps it uses the DB or a file). We'll want to consider providing out of the box implementatios and make it more easily pluggable in the future.
Core Spring Development Team