Por que todo CIDv0 do IPFS começa com Qm?
Porque um CIDv0 é um multihash SHA-256 (2 bytes fixos de cabeçalho, 0x12 e 0x20, mais 32 bytes de digest) codificado em Base58btc, e esses dois bytes de cabeçalho sempre produzem os caracteres "Qm" como abertura, independentemente do arquivo. Trocar o algoritmo de hash mudaria o prefixo; trocar só o conteúdo do arquivo, não.
CIDv0 e CIDv1 do mesmo arquivo apontam para conteúdos diferentes?
Não. Os dois podem carregar exatamente o mesmo digest SHA-256, então referenciam o mesmo conteúdo. O que muda é a representação: CIDv0 é sempre Base58btc sem campos de versão ou codec, CIDv1 adiciona esses campos e usa Base32 por padrão. Clientes IPFS modernos aceitam e resolvem os dois formatos para o mesmo conteúdo.
Por que CIDv1 é usado em subdomínios como bafybei....ipfs.dweb.link?
Porque nomes de domínio DNS são case-insensitive e normalizam tudo para minúsculo antes de resolver. Um CIDv0 em Base58btc mistura maiúsculas e minúsculas de propósito (é parte do alfabeto de 58 símbolos), então dois CIDs diferentes poderiam colidir depois que o DNS dobrasse o caso. Base32 minúsculo do CIDv1 elimina essa ambiguidade.