Moin Lume,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS.
Was mir als erstes aufgefallen ist:
SHGetFileInfo liefert im gezeigten Zusammenhang nur 0 (Fehler) oder <> 0 (Erfolgreicher Aufruf) zurück.
Den Rückgabewert an das ImageList
Handle zu übergeben hat also keinen Sinn.
Ausserdem fehlt ein Resourcenschutzblock (try/finally) für die Bitmap.
Zudem solltest Du die Imagelist nicht in der Routine erzeugen, wenn Du sie auch ausserhalb verwenden willst.
Wieso der erste Aufruf funktioniert hat ist mir allerdings ein Rätsel, denn mit
tmpImgLst.GetBitmap(FileInfo.iIcon,tmpBitmap);
rufst Du ein Bild aus der Imagelist ab und kopierst es in die Bitmap. FileInfo.iIcon hat mit Deiner Imagelist aber nichts zu tun, sondern bezieht sich auf die Systemimagelist.