This is a problem.
If you had a constant list of npcs wearing shields, you could use a function called by engine after the world is loaded (even from saved game) - it was Init_Global or Startup_Global, I don't remember which one.
I understand that in your mod shield can be used by ANY npc, so such function wouldn't help anyway (because there is no way to iterate on all NPCs (nor iterate on anything other (in fact, make any normal loop)). Instead, you need to use callback that is ran on every npc, for time of its execution storing that npc in global variable "self".
Such simple solution would be to use function called at PERC_ASSESSPLAYER. Assuming that npc's are starting fights mainly after they see a player, its sufficient to check from it if "self" wears a shield, and if yes, apply overlay mds on him (it's quite easy, I can help with it).
The only drawback would be that if npc starts a fight AFTER savegame is loaded, but BEFORE he has any chance to see a player, he wouldn't use a shield. But such condition should be very, very rare. And it can be fixed with use of other PERCs (but I'm not sure if it's worth it).
Have you heard about npc perceptions and know how to use them?