First I mistook this was a common overlapping-features question... what makes this unique is, that these overlapping points are on different layers.
If we can use refFunctions plugin:
(1) Open Layer Properties | Style tab
and highlight Simple marker
. Scroll down to Offset X,Y
and click on Data defined override
(epsilon icon) and select Edit
.
(2) In the Expression window, write:
CASE
WHEN count_distinct(geomoverlaps('another_layer', $geometry)) = 0
THEN to_string(rand(-5, 5)) + ',' + to_string(rand(-5, 5))
ELSE '0.0,0.0'
END
Above example will offset your points by up to 5 mm (if your Offset X,Y unit is set to [Millimeter]) randomly, if they overlaps with those of another_layer
.
This approach does have a limitation, as you see, that it works among 2 layers only. Sorry... :(