When you call the public function rlp->decode it internally calls decodeData. decodeData returns an array of the first byte 'data' => $firstByte and the rest of the data 'remainder' => mb_substr($input, 2), but encode only returns data (the first byte) to the user. Seems odd.
I'm extremely new to all this, and in the process of trying to figure out why sendRawTransaction is complaining of extra data, I ran across this and wasn't sure if that was intentional.