This doesn't look like a sound way to proceed.
You're insisting that every tag of the bundle matches every tag of the FnCall; this shall never happen if there are two distinct tags in the FnCall (go on, write a test-case for that before you fix this).  I think you should ask for each tag of the FnCall to be matched by some tag of the bundle.  For that you need to: <code>
for (each arg_tag in tag_args)
{
   const Rlist *bundle_tag = bundle_tags;
   while (bundle_tag)
   {
      if (bundle_tag matches arg_tag) { break; }
      bundle_tag = bundle_tag->next;
   }
   if (!bundle_tag) { found = false; }
}
</code>