What is causing the particle system to not follow the density group? Use modifier stack is enabled, both objects are well subdivided and the canvas object is an unmodified plane.
Unfortunately it's much more complicated than it should be. I can elaborate once you tell me if that's an option for you.
A possible workaround: Create a particle system sparks that is emitting continously. Place the PS where the laser hits the surface. If you want to randomize the bursts of the sparks some more, you can randomly turn on and off the visibility in render. Note that this might look weird if your spark lifetime is more than a couple of frames.
You could refine that a lot more using animation nodes, by grabbing the position of live particles and placing a custom object where they are relative to the point where the laser hits the surface. This way you have more control when turning them on and off.
Or you could try baking the sparks using physical objects and rigidbody physics. Bake 10 or so, parent them to an object that follows the laser, use animation nodes to only show 3 or 4 at a time and evaluate their f-curves, depending on the current frame and their "birth time".