[SOLVED] Can't get the Thing to post mqtt command upon receiving state change

Will not happen. When an MQTT message arrives at openHAB, the stateTopic willpost it to a channel and onwards to an Item.
If an openHAB command arrives at an Item, a channel will pass it a binding, and in this case the MQTT binding will use the commandTopic to create an outbound MQTT message.
Note that there is no link between inbound state and outbound command. That’s quite deliberate, state and command kept separate else practically everything would end up in an action/response/action loop.

You need to do something else to create that link.
One way is rules - listen for a state update, issue a command.

Another way is follow profile - configure a channel to convert incoming state to a command on an Item. Binding can then process command in the usual way. This needs an Item with two channels.

Another way is to use postCommand to cause the binding to massage incoming MQTT into an openHAB command, which the MQTT binding can once again use for an outgoing message. This needs to be done via an Item with two channels.

An extra complication is that Contact type Items in openHAB do not handle commands, so probably not suitable for the way you are working here.`