I'm just guessing here, but this smells like a .DS_Store corruption issue.

Each folder can have a set of custom view options for each different view. That is, it can have a set of view options to apply when the folder is in list view, another for when it's in icon view, another for column view, etc.) There is also a set of default view options, one for each view, that will be used for folders that have not specified custom view options for that view.

The view options for each view are completely independent of the view options for other views. It's quite possible for a folder to have no custom settings for list view, valid custom settings for icon view, and corrupt custom settings for column view.

The custom view options for a folder are stored in the .DS_Store file of the folder's parent folder, permissions willing, or in the .DS_Store file within the folder, permissions willing. Recently changed view options are held in Finder's RAM until (if) Finder quits normally. Force-quitting Finder discards all view setting changes since that launch of Finder.

In column and list view, the settings used are those for the top folder in the window. View settings for subfolders are ignored.

The upshot of all that is that it can be non-obvious where a particular window's view settings are coming from. If they're coming from a corrupted .DS_Store file, they could be wonky.

In column view, the Show View Options... window offers a checkbox to hide icons. There's no such checkbox for list view, but the option probably corresponds to a bit that is also stored (and honored) in the list view settings.

In list view, the Show View Options... window offers a choice of two icon sizes. Icon view settings have a slider, suggesting that even in column and list view the size is probably actually stored as an integer. If that integer somehow became zero (or negative), icons would not be displayed.

Icon previews are also cached in .DS_Store files. The icon preview for a file is cached in the .DS_Store file of its parent folder. The icon preview for a folder can be cached in either of the .DS_Store files that the folder's other settings could be stored in.


That suggests the following remedy, next time you run into the problem:

First, try the simple change. Toggle those things you can toggle, and see if Finder can change an invalid value to a valid one. In column view, toggle "Show Icons" off and on. In list view, toggle icon size between large and small.

If that fails, try figuring out which .DS_Store file contains the view settings for that folder, and trash it. You may have to trash the .DS_Store file inside the folder as well as the one in its parent folder, because folder setting can wind up scattered across both files, especially if you've been changing permissions. Also trash the .DS_Store file in the folder immediately enclosing files with missing icons (which in list and column view is not necessarily the root folder for the window).

Bear in mind that trashing .DS_Store files also trashes Spotlight comments and icon positions (for icon view). You might prefer not to go around trashing them willy-nilly.

Treat .DS_Store files the way you would treat preference files. Nothing happens if you trash a preference file for a running application; the application has already sucked its contents into RAM, and will write it all back when it quits. In the case of .DS_Store files, you should quit Finder first. Use Terminal to do the trashing, as in:
Code:
cd <folder in question>
osascript -e 'tell application "Finder" to quit'
rm .DS_Store
rm ../.DS_Store
osascript -e 'tell application "Finder" to activate'


Quitting Finder first forces it to update its preferences, including all .DS_Store files, from RAM. When you then relaunch it, all your windows will come back in their current positions, sizes, and view. Force-quitting Finder would revert all those things to their state as of the last time Finder quit normally.