If you are using DataPower to pull messages from MQ which contains persistent messages, do yourself a favor and set the ‘Units of Work’ on the QM in DP to 1.
This will enable DataPower to use SyncPoints from MQ and allow you transactionality on a per-message basis.
Without this setting, you can get very strange behavior when you want to discard a message. You could see the entire batch of messages re-appear on your input queue.
My theory is that MQ implicitly creates a syncpoint when DataPower connects and one end it disconnects. If it doesn’t get confirmation that all the messages were successfully processed, then the only recourse is for the QM to rollback the transaction, causing all the messages datapower successfully processed to return to the queue.