Edd, based on what I understand from your question, I believe this is something I experienced before as well. In my case, I found that combo box controls will patch data back to a SharePoint List or Dataverse table without issue when creating a record. However, when I updated the record through a Patch function for updating the record, I found that the default data in that combo box was patching a blank value back. To troubleshoot why it was doing this, I created a text label to reference this Combo Box control and sure enough the text label was blank.
My solution for this, although not ideal, resolved the issue. Instead of Patching straight from the Combo Box, I patch from a Text Label that is set to invisible and references the Combo Box. In the Text Label control, I input the below formula in the Text property to first check if the Combo Box was blank, then refer to the existing record input. If not blank, then populate the Text label with the selected item from the Combo Box. I then updated my Patch function to write the Text Label back to the Dataverse table rather than the Combo Box control.
The formula below references three separate Dataverse tables (one for each region in the organization) so that the Text Label control populates with the data from the respective region's Dataverse table based on the "Log Number" selected in a separate Combo Box that is used to lookup a record and populate all the fields in the Canvas app (no use of Forms in this app). The Log Number is a unique record ID I wrote into the Dataverse table that made more sense to the user than the GUID.
I'm fairly new to Power Apps, so I'm sure there's a better solution, but this has worked for me to resolve the issue with Combo Boxes returning blank values back to the SharePoint List/Dataverse table when updating a record.
If(lblRegionOutput.Text="1",If(IsBlank(cboLogSubtypeSel_5.Selected.field_1),LookUp(colExistingOneLogRecords,cr76c_logno=lblLogNoOutput.Text,cr76c_subtype),cboLogSubtypeSel_5.Selected.field_1),
If(lblRegionOutput.Text="2",If(IsBlank(cboLogSubtypeSel_5.Selected.field_1),LookUp(colExistingTwoLogRecords,cr76c_logno=lblLogNoOutput.Text,cr76c_subtype),cboLogSubtypeSel_5.Selected.field_1),
If(lblRegionOutput.Text="3",If(IsBlank(cboLogSubtypeSel_5.Selected.field_1),LookUp(colExistingThreeDOSLogRecords,cr76c_logno=lblLogNoOutput.Text,cr76c_subtype),cboLogSubtypeSel_5.Selected.field_1)
)))
cboLogSubtypeSel_5 = Combo Box where the subtype for an assignment is selected
colExistingOneLogRecords = collection from Dataverse table
cr76c_logno = Custom created unique record ID in the Dataverse table
lblLogNoOutput = Text label based on a separate Combo Box control for selecting the custom unique record ID
Hope this is helpful.