Потому что ты пытаешься применить GetAssignedHero к юниту. Все же явно написано. Эта функция тебе вообще не нужна, npc это и есть герой, ты же даже сделал проверку
IsRealHero() кстати лучше заменить просто на IsHero(), иначе будут иллюзии палиться.
При первом спавне PlayerResource:GetPlayer(npc:GetPlayerID()):GetAssignedHero() действительно не находит героя, хз почему. При респавне работает. Можно было бы таймер создать, но делать этого не стоит.
Когда ты спавнишь героя командой, PlayerResource:GetPlayer(npc:GetPlayerID()) возвращает именно тебя (как игрока), поэтому при применении туда GetAssignedHero() получается твой основной герой. И надпись дается именно ему, а не боту.
При создании шестого бота происходит полуошибка, в результате которой владельцем героя становится "призрак", и у него уже только один герой, поэтому GetAssignedHero() для него срабатывает как надо.