the first thing to address is that grains.host should not be trusted. any minion can change its grains to any host and be able to pull any of the pillars that would be presented to other hosts.
grains.id is the only grain that can be trusted in pillar. as that grain is set to the minion id on the master side.
next. I just tested ignore_missing, i also copy and pasted your example into my top.sls as is. and it worked fine for me on 3005. Which leads me to believe it could be any number of things that removes ignore_missing from the same indentation level as the actual pillar files. most likely a difference between space and tab. or some other whitespace issue.
also, start using the pillar commands to test. such as saltutil.pillar_refresh. and pillar.items. it will save time and you can work directly wit the pillar instead of waiting for a highstate.
also, if you look on the master. like the error says. what does the master say?