How does the bip32 version bytes convert to base58? Converting the BIP32 version bytes - x04\x88\xad\xe4 - from base256 to base58 and base58Check returns 7irrX and 1kz713TZjju, respectively.

I thought the version bytes represented xprv. What am I missing?

I'm using pybitcointools, if that makes a difference.
Just like in regular bitcoin addresses (or anything base 58 encoded), the version bytes don't get encoded by themselves. As described in the Serialization format section, there is 78 byte payload that gets versioned and checksumed before then being encoded into base 58:


  
  4 byte: version bytes (mainnet: 0x0488B21E public, 0x0488ADE4 private; testnet: 0x043587CF public, 0x04358394 private)
  1 byte: depth: 0x00 for master nodes, 0x01 for level-1 derived keys, ....
  4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
  4 bytes: child number. This is ser32(i) for i in xi = xpar/i, with xi the key > - being serialized. (0x00000000 if master key)
  32 bytes: the chain code
  33 bytes: the public key or private key data (serP(K) for public keys, 0x00 || ser256(k) for private keys)
  


There's not a byte-to-character mapping when you do base58 serialization of a multi-byte structure. It's not like 0x04 becomes 'x', 0x88 becomes 'p', etc. Rather, the whole 86 (78 payload + 4 version + 4 checksum) byte structure gets encoded to something that starts with 'xpriv' when the 4 most significant bytes of the 86 bytes structure are [0x04, 0x88, 0xad, 0xe4].