I was referring to the bloom filter recalculations. It's done
asynchronously in bitcoinj and I suspect race conditions. (I've seen
missed transactions after transactions sent by users. I suspect the
issues were not visible before SegWit since non-SegWit doesn't really
require recalculations.)
By dropping the peer and reconnecting it forces an immediate filter
calculation which is done synchronously in the connecting process afair.
That is of course just a work around. A real fix would get rid of the
COutPoint matching and would always match the "previous output script"
(the script being spent), which would greatly reduce code complexity and
fix a good amount of privacy issues with server-side filtering. But it
would need changes to BIP37 and Bitcoin Core.
The main reason for peer dropping is improved privacy.
Also, it improves the measurement of broadcast confirmations since you
likely will hear your transaction back on the freshly connected peer.
You're welcome to not use the peer dropping – it should then behave as
before.