You can nest iif() functions in the Where Clause (i.e. the criteria) of the SQL Statement of the query to tell Access which records to return, based on the combo box value.
Attached is a small demo DB, in which I have nested two iif() functions in the Where Clause of the query statement to illustrate your 3 points. (It will be easier to directly type the statement in SQL View than to use the query grid.)
qryComboBox:-
SELECT *
FROM TableName
WHERE IIf(IsNull([forms]![formName]!ComboBoxName), [PONumber]=[PONumber] Or IsNull([PONumber]), IIf([forms]![formName]!ComboBoxName=" Null", IsNull([PONumber]), [PONumber]=[forms]![formName]!ComboBoxName))
ORDER BY [PONumber], [Amount] DESC;
Note. [PONumber]=[PONumber] will return every record that has a value in the field PONumber
I have used a table Null_All to hold a Null value (i.e. empty) and a " Null" for use in the combo box's Row Source:-
SELECT Distinct PONumber FROM TableName UNION Select [Null_All] from Null_All
Hope the demo helps.