Working on a 2d sports game, I have a field area 2d that has player CharacterBody2D objects as children. When a player is clicked they become selected. When the field is clicked a waypoint for the selected player is set. Both types subscribe to their own input_event signal to process mouse clicks. Player calls 'viewport.set_input_as_handled()' on consuming the event.
However, it appears that neither object heirarchy order or z layer impact which receives the event first, and is instead somewhat random, so there are times where field gets the input event first and incorrectly processes the click, setting a waypoint under the player to be selected. I was originally using unhandled_input for field until I realized that (somewhat counterintuitively to me at least) that object events come dead last in the processing order.