If you do not use message selectors and you are sure that the 'missing' messagehas not already been consumed, than it sound's like a bug.
The next person to say "BUG" at the drop of a hat without any evidence gets their
profile deleted. :-)
If it was a "bug", then you have a reproducable testcase that shows it is not doing what
it says it is supposed to do in the documentation or spec (quoting chapter and verse),
or you have some logging that shows how/where it went wrong.
This has been discussed many times before (including a painfully long discussion on
jboss-user about 2-3 years ago).
Message 1 - Currently being processed by application
Message 2 - Read ahead by JBossMQ client code
Message 3 - Still in the queue
There is even an outstanding feature request on JIRA to make this "read ahead" configurable, but those that want this feature don't seem interested in implementing it.
Ok, so let's call it a feature :-)