Dass es am dynamischen Laden liegt, glaube ich nicht. Dann müsste ja auch der normale Aufruf via Button (den du erwähnt hast) Probleme bereiten. Eigentlich unterstützt Delphi doch HLP-Dateien von sich aus. Und dank "OnHelp"-Ereignis kannst du doch diese Kommandos für CHM umbauen. Ich glaube, ein Abfangen von WM_HELP ist damit eigentlich nicht notwendig.
PS: Ich bin ja schon froh, dass du nicht einfach nur "ShellExecute" benutzt.