Okay, we have figured it out. Add this to the list of how SharePoint shortens my life expectancy every day I come to work.
SharePoint lists/libraries use 0/1 for yes/no field values.
InfoPath can use False/True -OR- 0/1 for values in boolean data source items and checkbox controls. By default is uses False/True but False is not the same as 0 and True is not the same as 1. You have to manually change the settings on the data source field and form controls to use 0/1 instead of False/True so that the column value matches the control value.