waypaper reads only the copy of its config in the home directory, and
that copy is seeded with tmpfiles 'C', which never overwrites. The store
path substituted into it therefore froze at the moonarch revision it was
generated against, and the next garbage collect took that source away —
leaving the session with a black background and no error anywhere.
/usr/share/backgrounds/moonarch.jpg is relinked on every activation, so
the seeded config keeps naming a file that exists, whatever moonarch
revision is current.
gtklock and greetd keep their store paths: their configs are regenerated
on every activation and are held by the system profile, so neither can
go stale the way the seeded copy did.