So, what I've found is that it's kind of hit or miss with unicode, some stuff works, some doesn't.
I've come up with a workaround.
The file names I get with the OpenDialog appear to be correct, so I use those with CopyFile to create temporary files with names temp001.mp4 and temp002.mp4, for example:
CopyFile(VideoFilename, 'C:\ffmpeg\media\temp001.mp4', TRUE);
CopyFile() didn't seem to have any problem with the Korean characters.
I can then use these temp files in the call to ffmpeg since they have no unusual characters to get messed up, and for the name of the file ffmpeg will output I used temp003.mp4
Now the trick is to get the temp003 file back to the name with the Korean characters. I tried using RenameFile(), but once again the Korean characters got screwed up no matter what kind of encoding I tried. So instead I used CopyFile() again and this worked.
Afterwards I just delete the 3 temp files. It's a kluge, but I don't see any other way.
Conclusion - Support for Korean characters is a mixed bag, CopyFile() works but RenameFile() and passing as parameters to external programs don't work.