plone.app.contentrules.handlers.DuplicateRuleFilter is unnecessarily aggressive when, within any request, portal_workflow.doActionFor() is called multiple subsequent (but distinct) transitions. IMHO, this should be considered a bug (for both 3.x, 4.x)?
The de-duping is keyed on request (thread-local state), uid of content, and name of rule. I would propose that for purposes of a workflow-transition that the transition name be included in the tuple key added to the DuplicateRuleFilter's executed set:
(uid, rule.__name__, event.action or None)
Is https://github.com/plone/Products.CMFPlone/issues the place to file a ticket for this?