Thanks for the reply, but this appears to be a bug with DirectionalLight2D.
In my original post/setup, on each DireactionalLight2D I was mistakenly setting the Visibility.LightMask (which controls the lights cast on a node, nonsensical for a light) not the Range.ItemCullMask (which nodes are affected by the light). Shout-out to https://www.imaginaryrobots.net/posts/2022-02-03-understanding-light2d-masks-godot/ for helping me understand that (I've also renamed all my 2D Render Layer names as suggested in that post, for clarity).
The problem remains, though: toggling either DirectionalLight2D (with its Range.ItemCullMask set to only a single 2D Render Layer) illuminates the entire scene, not just nodes with a matching Visiblity.LightMask 2D Render Layer.
Per Megalomaniak 's suggestions, I tried limiting this by Z Index : setting the intended sprite to have a non-Relative Z Index of 10 (leaving all the other nodes at their default 0) and then changing the DirectionalLight2D 's Range.ZMin to 9. The result is the same, the DirectionalLight2D continues to illuminate the entire scene.
Then I tried adding a PointLight2D to the scene, with the same Range properties as one of the DirectionalLight2Ds, and with a texture scaled large enough to cover 2 of the sprites (and a portion of the background tilemap). Adding a new button to toggle this light shows that the PointLight2D correctly illuminates only the sprite with the matching Light Mask.

Working in-game (note: the DirectionalLight2Ds still don't work in exactly the same way as shown in a screenshot in the original post):

Updated 7z archive with changes described: https://file.io/t7jIHt3MOnJO
I'm going to try to find the right place to report a bug, and link to this thread.