Is the problem not that you wrote, field="caller_id_number"
and shouldn't it be, field="${caller_id_number}"
It probably would work either way. I just looked at the source, in mod_dialplan_xml.c, line 354, and found that if the field contains a dollar sign, then it is expanded and that is used to match the expression. However, if it does not contain a dollar sign, then it fetches the data from a variable of that name.
That means that you can't put the name of a field in a channel variable and use that in the field parameter as a way of doing double-indirection (which would be a bad idea anyway).