P.S.: Use cases of identifier syntax include:

(1) Procedures overloaded by macros (as discussed here; see also
"define-integrable" in Chez's manual).
(2) Definition of immutable variables (where "set!" gives an error).
(3) LISP-style dynamic variables/C-style thread-local variables.

In all these cases, the syntax is well-behaved (and it can be reasoned
about as if variable references were given).

Thanks, that's helpful.  From the logs of #scheme back in 2011-08, Sam Tobin-Hochstadt listed the following partial list of identifier-syntax uses in Racket:  "contracted values, functions w/ keyword arguments, structure constructors, the `this' binding in classes, local field references in classes, imports in units". Note the presence of keyword arguments.

I also found this recipe (which could of course be packaged in a macro) for identifier-syntax with ER (the use of IR is trivial and could be removed):

(er-macro-transformer (lambda (exp r c) (let ([new-name (cadr exp)] [old-name (caddr exp)]) `(define-syntax ,new-name (ir-macro-transformer (lambda (exp i c) `(,',old-name ,@(cdr exp)))))))))