This has happened to me as well, however I realized it only happens with quests or bounty dragons that I have previously killed. They respawn to complete the quest yet are scripted to not provide another soul
Exactly.
Randomly encountered dragons are freshly generated from a leveled list each time one is triggered, so will always have a soul, as will dragons encountered on an initial trip to a word wall. The latter, however, are unique, so when the cell respawns a generic version is used instead that doesn't have one.
I suspect that the substitution is meant to stop the farming of souls, although it's basically wasted effort since you'll end up with far more of them than you need anyway. Of course, there's also a lore-based reason for it, since you can only absorb a given soul once, but I have a feeling that's not why it was done.