If you want C to be able to decrypt anything addressed to B, then the simplest thing is to simply give B's decryption key to C.
There is also something called proxy re-encryption that is also in the spirit of "re-addressing" a ciphertext. In proxy re-encryption, there is an algorithm $\textsf{ProxyKey}(sk_B, pk_C) \to rk_{B\to C}$: it takes B's private key and C's public key as input, and generates a re-encryption key $rk_{B \to C}$. Whoever has this re-encryption key can do $\textsf{ReEncrypt}(rk_{B \to C}, ctxt) \to ctxt'$, which takes a ciphertext $ctxt$ addressed to $B$ and transforms it into $ctxt'$, an encryption of the same thing but addressed to $C$.
(There are also variants where $\textsf{ProxyKey}$ needs the private key of both parties.)
The important distinction here is that the person who "re-addresses" the ciphertext (the "proxy") can be someone other than B or C. A proxy who only has $rk_{B\to C}$ but who doesn't know B or C's private keys can't open ciphertexts addressed to B or C. They can only transform ciphertexts for B into ciphertexts for C (and not vice-versa) without looking inside. Assuming the proxy and C are distinct parties, then C can only read messages addressed to B that the proxy chooses to transform.