Correct usage of curly braces in Spice
The usage for SPICE 3f3 is defined by the manual for SPICE 3f3. The usage for LTSPICE is defined by the manual for LTSPICE. The usage for PSPICE is defined by the manual for PSPICE.
These are three different programs and their authors have defined different syntax for mathematical expressions.
You should not expect LTSPICE or PSPICE to follow the SPICE 3f3 syntax, or to match each other.
Ngspice is actually based on the SPICE 3f5 code-base, so it is more likely (but not guaranteed) that ngspice syntax will be similar to SPICE 3f3.
It's unfortunate, but something that you'll have to live with, that there is no official standard defining SPICE syntax, and particularly in the area of mathematical expressions different SPICEs have different syntax.

The 'correct' usage is presumably defined by Spice 3f3 or similar, but the stuff I can find online is not clear what 3f3 requires.

After reading the Spice 3f3 manual I believe the reason for this is simply that Spice 3f3 doesn't allow parameter substitutions in many of the places that newer SPICEs do. For example, you can not use a math expression to define the BETA parameter of a BJT.
There is an &quot;interactive interpreter&quot; that allows you to use expressions to modify model parameters using expressions through a command-line interface after loading the model, but no syntax to allow using such expressions in the initial circuit definition in the SPICE &quot;deck&quot;.