To understand the difference, we should first try and understand what these terms mean individually.
MaxMessageCount is the maximum number of transactions that are permitted in a block.
AbsoluteMaxBytes are the maximum number of bytes that are allowed for serialized transactions in a block.
PreferredMaxBytes are the preferred number of bytes that are allowed for serialized transactions in a batch. When a transaction is larger than the PreferredMaxBytes, a larger batch will be formed.
If there are numerous transactions then stuff as many transactions as possible in a block to get the maximum throughput. Otherwise, you can tweak the BatchTimeout and MaxMessageCount for optimizing overall transaction throughput.