In one byte: you can encode up to 2 8 values (i.e. 256 values).
When a transaction hash is encoded in a byte[243] , only 3 values within the 256 possibilities are effectively used in each byte. This representation encodes one trit per byte.
When a transaction hash is encoded in a byte[49] : 243 values within the 256 possibilities are used in each byte. This representation encodes 5 trits per byte.
Now, the funny part is that on the main net a valid transaction hash ends with 14 zero trits. So a valid transaction hash contains 229 significant trits (i.e. 243-14).
When a valid transaction hash is encoded using the "5 trits per byte" scheme: it requires only 46 bytes (46*5 = 230 and 229<230).
The "one trit per byte" scheme is used for internal representation only. i.e. when it comes to networking (or permanent storage) : the more efficient "5 trits per byte" scheme is used. The REQ_HASH_SIZE parameter is used in the context of networking (it's the size of the transaction to request in a packet).
It is obvious that the "one trit per byte" scheme is not the very efficient regarding memory consumption. (note that in previous version of the IRI it was worse: one trit was encoded in 4 bytes).