Bei TIF/TIFF ist PhotoViewer.dll im \OpenWithList eingetragen.
Bei JPG/JPEG ist dieser Eintrag aber leer.
Das Öffnen im Explorer verwendet aber \Shell\Open, \ShellEx\Open und vieles Anderes.
FindExecutable nutzt also nicht die selben Einstellungen und liefert somit auch andere Ergebnisse.
Wenn es nur um das Öffnen von Dateien geht, warum übergibst du nicht einfach die Datei direkt an ShellExecute und lässt Dieses die Auswahl treffen?
Denn das nutzt die selben Funktionen, wie der Explorer, bzw. der Explorer nutzt wohl ShellExecute.
Außerdem hat der Explorer auch nochmal eigene Einstellungen, in einem eigenen Registryzweig, wo das gespeichert wird, was verwendet wurde, als der Nutzer im Explorer "Öffnen mit" aufrief.