I did get it to work writing my own SelectPath(). I started with the functions in the Microsoft code. They do it a bit inefficiently. They parse the pidls at each level to get the display name and compare it to the pidl for that level at the given path. Instead of calling SHGetFileInfo once for each level for the path given and then compare to the results of the call for each pidl of the directory, it makes redundant calls to that function each time it checks a level.
Parsing directories can take a lot of time. You want to eliminate any redundancies if you can.
I'm going down this road because the old tree I was using could take up to a couple of minutes to parse a complete drive tree and we know everything will always be below a set data path given to the program. My customer wanted to limit the tree to just the contents below the given data path. ie set the root to the data path in the program.
Anyway I was able to get programatically selecting the path to work by limiting the search to just below the data path given. To debug the given path converted to pidl and then parsed back, I captured all the strings for each level in an array to investigate. I found the parsed pidl path was in this format:
"Computer C:\foo\foosub1\foosub2\etc"
"Computer" was an extra layer not in the given path.
I'd select my post above as the solution, but I can't select one of my own posts as the solution.