Thank you DeathAndTaxes!
You are right, I was encoding the OP_MULTISIG incorrect.
I took your advice to generate the multisig address using bitcoin for comparison. The address created and redemption script match the values you listed and I noticed that I was not including the opcode prefix on my public keys when creating the redemption script.
My updated example, including a transaction to try and spend my source address is below. Both the change and the destination are (I think) going to multisig addresses, just one is using the redemption script, and one is using a pay 2 script hash.
source address
pubKey1: 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf
pubKey2: 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81
pubkey3: 02d43c07142463a881897de5640b724942857dfd89db6fcf47241cc0d2e71b801d
source redemptionScript:
n || publicKey0 || publicKey1 || publicKey2 || m || OP_CHECKMULTISIG
source redemptionScriptValues:
52 || 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf || 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81 || 02d43c07142463a881897de5640b724942857dfd89db6fcf47241cc0d2e71b801d || 53 || ae
source redemptionScript:
5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af812102d43c07142463a881 897de5640b724942857dfd89db6fcf47241cc0d2e71b801d53ae
source address: version || hash160(publicKey) || checksum
source address: c4 || 8e9ec4f0c66c4045542515899929de513aeb393e || b332b6ad
source address: c48e9ec4f0c66c4045542515899929de513aeb393eb332b6ad
source base58 address: 2N6FL91RhAjoD2jF7rYBmtpeUR3RGZKp31n
source address from bitcoind:
{
"address":"2N6FL91RhAjoD2jF7rYBmtpeUR3RGZKp31n",
"redeemScript":"5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af812102d43c07142463a881 897de5640b724942857dfd89db6fcf47241cc0d2e71b801d53ae"
}
destination address
destination pubKey1: 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf
destination pubKey2: 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81
destination pubkey3: 026a9bb2736489c4b946d1787b6c19e4a15078acad0a24058f6f411ee2cd80d308
destination redemptionScript:
n || publicKey0 || publicKey1 || publicKey2 || m || OP_CHECKMULTISIG
destination redemptionScriptValues:
52 || 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf || 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81 || 026a9bb2736489c4b946d1787b6c19e4a15078acad0a24058f6f411ee2cd80d308 || 53 || ae
destination redemptionScript:
5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af8121026a9bb2736489c4b9 46d1787b6c19e4a15078acad0a24058f6f411ee2cd80d30853ae
destination address: version || hash160(publicKey) || checksum
destination address: c4 || 247d3ea09b45ebe826042b5e58e98727b47e5d54 || f8bd4906
destination address: c4247d3ea09b45ebe826042b5e58e98727b47e5d54f8bd4906
destination base58 address: 2MvaAMLfZZ8JUb2UvC8w7Y9YevzkzQ69NBX
destination address from bitcoin d:
{
"address":"2MvaAMLfZZ8JUb2UvC8w7Y9YevzkzQ69NBX",
"redeemScript":"5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af8121026a9bb2736489c4b9 46d1787b6c19e4a15078acad0a24058f6f411ee2cd80d30853ae"
}
change address
change publickey0: 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf
change publickey1: 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81
change publickey2: 026a9bb2736489c4b946d1787b6c19e4a15078acad0a24058f6f411ee2cd80d308
redemptionScript:
n || publicKey0 || publicKey1 || publicKey2 || m || OP_CHECKMULTISIG
redemptionScriptValues:
52 || 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf || 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81 || 026a9bb2736489c4b946d1787b6c19e4a15078acad0a24058f6f411ee2cd80d308 || 53 || ae
change redemptionScript:
5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af8121026a9bb2736489c4b9 46d1787b6c19e4a15078acad0a24058f6f411ee2cd80d30853ae
change address: version || hash160(publicKey) || checksum
change address: c4 || 247d3ea09b45ebe826042b5e58e98727b47e5d54 || f8bd4906
change address: c4247d3ea09b45ebe826042b5e58e98727b47e5d54f8bd4906
base58 address: 2MvaAMLfZZ8JUb2UvC8w7Y9YevzkzQ69NBX
Transaction
Tx - version: 01000000
Tx - tx_in_count: 01
Outpoint - hash: 8b536157c1124e4f36abc779267b1b077d7fb32a4cd05675be5bb2d8e3d74933
Outpoint - index: 01000000
TxIn - script_length: 17
TxIn - signature_script: a9148e9ec4f0c66c4045542515899929de513aeb393e87
TxIn - sequence: ffffffff
Tx - tx_out_count: 02
TxOut - value: 40420f0000000000
TxOut - pk_script_length: 17
TxOut - pk_script: a914247d3ea09b45ebe826042b5e58e98727b47e5d5487
TxOut - value: 0039332a00000000
TxOut - pk_script_length: 69
TxOut - pk_script: 5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af8121026a9bb2736489c4b9 46d1787b6c19e4a15078acad0a24058f6f411ee2cd80d30853ae
Tx - lock_time: 00000000
transactionJsonObject:
{
"txid": "bb76d7a2eb8aa03ddd760bc20f165e155d3cd9da3180ec1435f49497095b41bf",
"version": 1,
"locktime": 0,
"vin": [
{
"txid": "3349d7e3d8b25bbe7556d04c2ab37f7d071b7b2679c7ab364f4e12c15761538b",
"vout": 1,
"scriptSig": {
"asm": "OP_HASH160 8e9ec4f0c66c4045542515899929de513aeb393e OP_EQUAL",
"hex": "a9148e9ec4f0c66c4045542515899929de513aeb393e87"
},
"sequence": 4294967295
}
],
"vout": [
{
"value": 0.01,
"n": 0,
"scriptPubKey": {
"asm": "OP_HASH160 247d3ea09b45ebe826042b5e58e98727b47e5d54 OP_EQUAL",
"hex": "a914247d3ea09b45ebe826042b5e58e98727b47e5d5487",
"reqSigs": 1,
"type": "scripthash",
"addresses": [
"2MvaAMLfZZ8JUb2UvC8w7Y9YevzkzQ69NBX"
]
}
},
{
"value": 7.08,
"n": 1,
"scriptPubKey": {
"asm": "2 037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf 02b024b76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af81 026a9bb2736489c4b946d1787b6c19e4a15078acad0a24058f6f411ee2cd80d308 3 OP_CHECKMULTISIG",
"hex": "5221037783b9aee0cd926306a30f37e2e819d69aa66707a1f96a15cc581368270c5bcf2102b024b 76570311b75fa353a0296c50d41629da101ecfee172449935c1a029af8121026a9bb2736489c4b9 46d1787b6c19e4a15078acad0a24058f6f411ee2cd80d30853ae",
"reqSigs": 2,
"type": "multisig",
"addresses": [
"mjDPU8nqkhjX3YxzTw7tPnPEa5puPPiQPx",
"mpe29LVS4NzxTM2xK1Bvasfq5GjBPXcaR7",
"mzW2Qzo9igJXbx9g7rNaRzVJzVQcoAhadu"
]
}
}
]
}