The spacing between symbols depends on their classes. You can check the default classes in General Symbols - Typst Documentation.
In your case, square and diamond.medium are normal, but circle is binary. Therefore, the spacing between them varies.
Refer to Can I fix the ugly spacing with `union/inter.big`? - #2 by Y.D.X for the details.
To make the spacing consistent, you can #let circle = $class("normal", circle)$ to override the default class.
= Before
$
prec.eq square circle diamond.medium prec.eq \
prec.eq circle diamond.medium square prec.eq \
prec.eq diamond.medium square circle prec.eq
$
= After
#let circle = $class("normal", circle)$
$
prec.eq square circle diamond.medium prec.eq \
prec.eq circle diamond.medium square prec.eq \
prec.eq diamond.medium square circle prec.eq
$
