Your command is almost correct! Just remove the zero before the ..10!
Correct command:
/execute as @e[tag=shulker,distance=..10] run give @a[scores={dragon_death=19..}] coarse_dirt 1
From personal experience using the distance modifier, it's a little finicky in the way that it handles the value. the zero always messes it up, no idea why. Thank you for your detailed question!