As per my understanding ReservedXcmpWeight
seems to be more of a cap in how much weight one block will be able to be filled by XCMP message execution than anything else.
Meaning that if no messages need to be served/executed for block X, then all that available block space is there to be filled by other executions.
Notice that there is a similar set up for DMP messages.
I would recommend reading service_xcmp_queue
documentation.. for some more insight on, and I quote:
Service the incoming XCMP message queue attempting to execute up to
max_weight
execution weight of messages