Looking at the 5.4.271 beta again, the ECP /query/icon/xxx on my 3100 returns icons only for Netflix, Amazon Instant Video, Roku Media Player and dev channels (12, 13, 2213, dev). No icons are returned for the other 21 channels; 404 instead (take 28-Pandora as example).
Here is how to reproduce it:
$ curl -w '%{response_code} %{size_download}\n' -so /dev/null http://192.168.1.25:8060/query/icon/12
200 2367
$ curl -w '%{response_code} %{size_download}\n' -so /dev/null http://192.168.1.25:8060/query/icon/13
200 17550
$ curl -w '%{response_code} %{size_download}\n' -so /dev/null http://192.168.1.25:8060/query/icon/28
404 0
$ curl -w '%{response_code} %{size_download}\n' -so /dev/null http://192.168.1.25:8060/query/icon/2213
200 50201
$ curl -w '%{response_code} %{size_download}\n' -so /dev/null http://192.168.1.25:8060/query/icon/7359
404 0
Naturally, this can also be observed in remoting apps. In RokuCo "Roku" iOS app, change to 5.4.271 player, go to My Channels app and force it (pull-down) to refresh app list; see lots of black icons. In DvpRemote, go to Channels and tap refresh button, get two dozen 404 popups or a crash (did not pinpoint when one or the other).
However, there is a twist: if you start a channel X, next time /query/icon/X does work. Seems that unpacks/deploys the icon. Puzzling, considering that icons are visible in the UI on TV. Yet another "however" - when you restart the player, /query/icon's will disappear again.