I figured it out. Here's what I did:
In my combobox code, I have a sub named UpdateLayerList which adds layers in the data frame that contain a required field to the combobox.
In my button code, I added the following to OnClick
Dim cbx = ESRI.ArcGIS.Desktop.AddIns.AddIn.FromID(Of clsLayerCombobox) My.ThisAddIn.IDs.clsLayerCombobox)
cbx.UpdateLayerList()
I had originally been close to the solution using the following
Dim cbx As ESRI.ArcGIS.Desktop.AddIns.ComboBox = ESRI.ArcGIS.Desktop.AddIns.AddIn.FromID(Of clsLayerCombobox)(My.ThisAddIn.IDs.clsLayerCombobox)
which did not cause any compile errors, but at run-time it would cause an exit from the code without any error messages. It was when I couldn't get that to work that I posted my question and then tried the approach using ICommandItem.
When that didn't work either, I searched some more and found sample code which I used and it works great. The difference is here
Dim cbx =
instead of
Dim cbx As ESRI.ArcGIS.Desktop.AddIns.ComboBox =
I may not understand exactly what is being returned here, but the code works, my layer list can get updated from my button correctly, and I'm happy. (In case you're wondering, there had been a problem in the past trying to update the layer list by listening to an update event for changes to the map, which is why we went with a button that the user clicks to update the list).
I also used similar code to get to the text in another combobox (which I'm using as a text box on my toolbar) so it's been a good afternoon.
Thanks for your responses.