Take a look at the IconExtractor class on the following link:
The Author of the above tutorial seems to have solved the problem.
The Author writes:
IE has a flaw in transparent PNG rendering, causing the transparent areas to render gray. The code includes comments that help you change the implementation from PNG to GIF, losing the transparent background.
The implementation of transparent background in GIF images is way too complicated in .NET, involving unsafe blocks of code, so I decided not to include it in this sample, for the sake of simplicity.