Not sure if the clarification/simplification was needed but all three of the addresses used are hashes of your public key.
It's your public key that's used to determine if a signature is valid. The part you put into a signature field on most wallets if your public key and the signature.
To be a valid signature wallets then have to check if that public key can be hashed into the address and then if the decrypted message digest matches the hashed message (if you encrypt/sign something with a private key, you can decrypt/verify it with the public key).
This actually gives me a novel idea for implementing "standardized signed messages for segwit".
Since the public key is being used to verify the message anyway, only the verification process needs to be changed.
1) When signing the message, the procedure remains almost exactly the same - same ECSDA algorithm with the same parameters, except in the "Address" section you merely place the segwit address in there.
2) Now when you verify the message, the signature and message will combine to give the public key. The public key can simply be hashed, and each encoding of P2PKH, P2SH, and P2WPKH can be tried in succession to see if they match the address. That way, it doesn't only try the base58 P2PKH encoder and fail for all segwit addresses.
All that needs to be done is create a BIP, and then get it approved for implementation (the implementation which is a ridiculously easy process as there is only minimal modification required to the sign/verify message processes).
Edit: I threw a rough draft of this idea into the mailing list, let's see what they have to say.