One more observation (maybe helpful, maybe not):
 
(scheme-syntax-rules
  :::2
  (c :continuation)
  ((_ (:continuation c :::2) c %%kt %%kf)
   (c :::2 %%kt))
  ((_ (:continuation c :::2) x %%kt %%kf)
   (c :::2 %%kf))
  ((test c %%kt %%kf) %%kt)
  ((test x %%kt %%kf) %%kf)) 

That code has been de-mangled for readability, so I can't tell
for sure whether the "c" in the literals is the same identifier
as the "c" that occurs in patterns and templates, but I think
something is wrong here either way, unless the first "c" in the
pattern for the first rule is a pattern variable but the second
"c" in that pattern is a literal.

The "c" is inserted here:

https://github.com/scheme-requests-for-implementation/srfi-147/blob/master/srfi/147.scm#L135
 
By hygiene, in each rule of the partial expansion above, the first and third "c" are equal identifiers; the second one (that, which is not followed by ":::2") is a different "c".

I guess, this is the "c", which appears here:

(letrec-syntax
  ((m
    (syntax-rules ()
     ((m a)
      (em (em-quote
           (em-if (em-free-identifier=? 'a 'm) 'true 'false)))))))
  (m c))

Could you test with your latest version what happens when that "c" is renamed to something different (a symbol not used elsewhere)?

Marc