Why does every IPFS CIDv0 start with Qm?
Because a CIDv0 is a SHA-256 multihash (2 fixed header bytes, 0x12 and 0x20, plus a 32-byte digest) encoded in Base58btc, and those two header bytes always produce the characters "Qm" as the opening, no matter the file. Changing the hash algorithm would change the prefix; changing only the file content would not.
Do CIDv0 and CIDv1 of the same file point to different content?
No. Both can carry the exact same SHA-256 digest, so they reference the same content. What changes is the representation: CIDv0 is always Base58btc with no version or codec fields, CIDv1 adds those fields and uses Base32 by default. Modern IPFS clients accept and resolve both formats to the same content.
Why is CIDv1 used for subdomains like bafybei....ipfs.dweb.link?
Because DNS domain names are case-insensitive and normalise everything to lowercase before resolving. A CIDv0 in Base58btc deliberately mixes upper and lowercase letters (that is part of the 58-symbol alphabet), so two different CIDs could collide once DNS folded the case. CIDv1's lowercase Base32 removes that ambiguity.