If there are particles with b2_fixtureContactListenerParticle flag in the system, contact listener receives BeginContact callbacks for all particles - even for particles without this flag. This happens because NotifyBodyContactListenerPostContact method doesn't take b2_fixtureContactListenerParticle flag into account.
Even worse, for particles without b2_fixtureContactListenerParticle flag, BeginContact callback is being called multiple times per contact - filtering out old contacts doesn't work.
The same bug applies to b2_particleContactListenerParticle and NotifyContactListenerPostContact method.