I broke mod_rewrite by modifying strings in place when expanding them, because variable lookups can cause subrequests which cause mod_rewrite to do its stuff again including an expansion on the same string, which is then syntactically invalid. So copy the lookup keys somewhere else before using them in such a way that may cause recursion.
In addition to this, my parser could also be confused by complicated nested rewrite map expansions like ${map1:${map2:key|dflt}|dflt} so fix that too by keeping track of {} when looking for |.