It turns out that I left out some important information:
1) My message sender sends the ObjectMessage with priority and TimeToLive set (1 hr). But - the TextMessage has no such parameters set.
2) I found a line in the trace output for the client:
[main] TRACE org.jboss.mq.SpyMessageConsumer - preprocess() acking expired message=...
3) A quick glance shows the two systems to have almost identical times set (less than 1 minute apart) and the dates are the same. Alas, the timezones are 6 hours apart.
Setting TTL=0 allows the client to read the message.