I can do it with 3 simple queries - maybe someone else can show us both how to combine them into one.
First - find all the matches between centers (list of centers to look up) and cost_centers (the rate table) - I called this query "All matches"
SELECT Centers.Center, Rates.cost_center, Rates.rate, Max(InStr([cost_center] & "x","x")-1) AS n
FROM Centers, Rates
GROUP BY Centers.Center, Rates.cost_center, Rates.rate, Left([center],InStr([cost_center] & "x","x")-1)=Left([cost_center],InStr([cost_center] & "x","x")-1)
HAVING (((Left([center],InStr([cost_center] & "x","x")-1)=Left([cost_center],InStr([cost_center] & "x","x")-1))=True));
Second, find the lowest level match, or the one with the highest "n" in the prior query - I called this "selected matches"
SELECT [All matches].Center, Max([All matches].n) AS n
FROM [All matches]
GROUP BY [All matches].Center;
Finally, get the corresponding rate:
SELECT [All matches].Center, [All matches].cost_center, [All matches].rate
FROM [All matches] INNER JOIN [selected matches] ON ([All matches].n = [selected matches].n) AND ([All matches].Center = [selected matches].Center);