Creating Block templates with ‘core/heading’ other than level 2

A new day, and refreshed Google-fu powers provided the simple answer:
The level attribute needs to be an integer, not a a string.

[
  'core/heading', 
  [
     'level' => 3,
     'placeholder' => 'Subheading',
     'className' => 'block-subheader-directions has-blue-alt-color',
  ],
]