Looking at your screenshots, the mismatch is almost certainly a type/format issue between the two Ref values.
Excel numeric columns often come through the connector as "123.0" even when the cell shows "123", and your SharePoint Ref is plain text. So even with trim() and string() wrapping, you end up comparing "42" against "42.0" and it never matches.
The fix is to normalise both sides to integer-as-string before comparing. In your Current SP Ref compose, use:
string(int(trim(string(items('Apply_to_each')?['Ref']))))
And in Filter array 1, make the left side:
string(int(item()?['Ref x0023 (Booking) (Booking)']))
The x0023 encoding is correct and not your problem, that is just how Power Automate handles the # symbol internally.
For the Itinerary Link blank check, switch Filter array 1 to advanced mode and do both conditions together:
@and(equals(string(int(item()?['Ref x0023 (Booking) (Booking)'])), outputs('Current_SP_Ref')), not(empty(string(item()?['Itinerary Link']))))
One more thing worth checking. Your first Filter array (before Apply to each) has toLower on the Itinerary Link but I cannot see what it is being compared to. If that condition is incomplete or comparing against empty string, it may be wiping out all your Excel rows before you even get into the loop.
Before anything else, drop a Compose right after List rows present in a table and output the first item body. Check the actual value coming through for Ref # (Booking) (Booking). Nine times out of ten you will see the decimal there and that confirms the int() fix will solve it.