What is the Base58Check checksum for?
It is SHA-256 applied twice over the version plus the payload, of which only the first 4 bytes become part of the encoded address. Any wrongly typed character changes those 4 checking bytes, so the wallet rejects the address before attempting to send anything, instead of sending funds to a destination that does not exist.
Why does a compressed private key start with K or L instead of 5?
Because a compressed WIF payload is 33 bytes, one more than the 32 of an uncompressed WIF, and that extra byte (0x01) pushes the numeric value of the whole payload upward before the Base58 encoding, which shifts the leading character from 5 to K or L.
Can a testnet address be mistaken for a mainnet one?
No, and that is exactly why the version bytes differ between the two networks: 0x00 and 0x05 on mainnet against 0x6f and 0xc4 on testnet. The version byte is the first thing Base58Check checks when decoding, so a wallet catches the wrong network before even checking the rest of the payload.