Cannot successfully verify signature over RPC

I am attempting to sign and verify a message over RPC, using C#. Round tripping the signature with sign_message_by_address does not pass verify_signature.

So it all looks hunky dory to me but verify_signature returns
"isValid": False, "error": "Signature is invalid."

The return from sign by address is this and relevant c# below:

{
  "pubkey": "b20609c50accadefe1c1f7e69dae624865c432c82615079d62df61c8aab3819c728d3c8be0c74e299c146873a32c20e9",
  "signature": "818718d0b6ac9e1ded65fdd7910bf243cc7eedccb4110cb71a48378462cba1023e76c2308525eee438cd0f57f83d79280c406edf98533aee71b317f609b8f2be17b1116bdff6be9662a8a415b25a494b031b3a073786e0be4e9e93820b9b1824",
  "signing_mode": "BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_AUG:CHIP-0002_",
  "success": true
}

These are the same results as using the cli:

chia wallet sign_message -m spoons -a txch1u6rknyeppcqxscpasjvxnpcenam9ztrexdyntqy6swhm0s70tgdqrr8j4e

Message: spoons
Public Key: b20609c50accadefe1c1f7e69dae624865c432c82615079d62df61c8aab3819c728d3c8be0c74e299c146873a32c20e9
Signature: 818718d0b6ac9e1ded65fdd7910bf243cc7eedccb4110cb71a48378462cba1023e76c2308525eee438cd0f57f83d79280c406edf98533aee71b317f609b8f2be17b1116bdff6be9662a8a415b25a494b031b3a073786e0be4e9e93820b9b1824
Signing Mode: BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_AUG:CHIP-0002_

C#

using var cts = new CancellationTokenSource(15000);
var address = await StandardWallet.GetNextAddress(newAddress: false, cts.Token);
// "txch1u6rknyeppcqxscpasjvxnpcenam9ztrexdyntqy6swhm0s70tgdqrr8j4e"
var message = "spoons";
var (PubKey, Signature, SigningMode) = await Wallet.SignMessageByAddress(
                message: message, 
                address: address, 
                cancellationToken: cts.Token);

var returnValue = await Wallet.VerifySignature(
                address: address,
                signature: Signature,
                message: message.ToHexString(),
                pubkey: PubKey,
                signingMode: SigningMode,
                cancellationToken: cts.Token);

Assert.True(returnValue);