Ok, so my problem was in fact coming from a huge design mistake in my system.
Indeed, I had two Cyclic Behaviours (in targetAgent) waiting for messages with a MessageTemplate matching the same performative and the same sender (senderAgent). These behaviours then both decide wether to do something or not, based on parsed content of the message. Since this was dumb and very bad design, fusing these two agents into one and adding the content-related condition there did the trick.
I found this out by reading the JADE documentation for the "receive" method. When I saw it was "getting a message in the agent's message queue", everything became clear: it there is no message in the queue when I try to receive, it certainly has been received already by another behaviour of the same agent.
Well, case closed!