Another couple of things...
When fo-DICOM finds some codecs in the above assembly it puts out a message via its logger (NLog). It'd be worth
a) Configuring that logging (if not done so already); and
b) Asking fo-DICOM to load codecs at app start time. I modified this bit of code in my fork so that it returned how many codecs were loaded and optionally accepted a different path. That was a bit overkill but did help with debugging this issue for me in the past.
You could also use Process Monitor (
www.sysinternals.com) to watch what files are being loaded by your app and which files are being looked for but not found. By doing (b) above you'll have a definite point at which codecs are loaded and then you should see your native DLLs being probed for and then loaded from disk. You should be able to see the paths that are being checked. If your native DICOM DLLs are not in any of those paths then move them there and you should have more success.