Are you using transactional queues?
Because if I'm right, the message you are sending to create the PDF should not even be receivable until the overall transaction is committed.
If you are not using transactional queues, then you could likely have the behavior you are seeing.
I've got a local set of changes that I'm about to commit that have tests for everything you mention here.
The one thing that I have found that is a constant. If you have two external sources producing messages that would target the same saga, one that can initiate the saga, and one that is applied to an existing saga (both messages have a matching correlation pattern that would result in the same saga), if the initiating message has not been processed, the second message is not processed even after the first one gets processed. There is really no way around it other than to make both messages so they will create or use an existing saga, which will cause a duplicate key exception if they both try to create a new one at the same time. This will result in the message being retried up to 'n' times, which should allow it to apply itself to the saga now that it exists.
Once I've had some more testing time with the local changes, I'll put them into the trunk. Overall I think the behavior is more clearly specified.