Consider a two router case where QD_QLIMIT_Q2_UPPER is set to 32 and QD_QLIMIT_Q2_LOWER is set to 16.
The router B receives a large message from from router A. The first two buffers of the message consists of header and properties respectively. This is followed by a 16 buffer body data which is followed by a 15 buffer body data. There are 33 buffers in total. The application code frees the first body data but that frees only 15 buffers because the second body data starts in the last buffer of the first body data.
Out of the original 33 buffers, 15 have been freed which means the number of buffers remaining in the message content is 18 which is greater than QD_QLIMIT_Q2_LOWER. So we remain in q2 and the second body data is not fully received.
This situation can be alleviated by not counting the header buffer towards the q2.