Is there a way to read a deployed contract's bytecode from leveldb?
Yes there is surely a way because (e.g. geth) JSON RPC expose the function
eth_getcode, that returns the code associated to an account. Under the hood it reads the status database (which in the case of geth client is a leveldb database).
From what I understand, within each account in the state tree, there exists the nonce, the balance, the codehash, and the storage root. Does the codehash point to the location in leveldb where the contract bytecode is stored?
According to the Yellow Paper, which is the formal specification of Ethereum (Section 4.1), yes:

And is it correct to say that contract bytecode stored in leveldb is only the body portion of the contract and not the init/constructor bytecode?
Yes, it is so. If you take a look to the Ethereum Yellow Paper section 7. It says that:

Therefore i
is executed and if all the execution is successful the body of the code o is produced. The hash of the body KEC(o) is stored in the account state. And o is stored in the database for later retrieval in case of contract invocation (i.e. the message call).