not technical info, but this is a quick explanation how it's working :
a game can store in the memory card different files or data binary, which are then pack together to form a single savegame package. this "package" can be selected in the memory card management as single data to copy/move/delete which are usually extracted and shared as .gci file using homebrew and emulators.
usually, emulators are emulating the full memory card binary with all the games, not the individual game binary (gci), nor the individual files stored in the gci "package".
NMM is not emulating the memory card but redirecting the individual files accessed by the game inside the savegame "package" (sorry, not the best word I found) to SD or USB.
the files have a filename, and data (like on a computer, you save your data in a file, and give a filename to that file).
The issue is that some games are not using FAT32 compatible characters for the filename, resulting in a different/converted filename. the game send the command to save using a specific filename, but NMM use a different filename due to FAT32 limitation. the file is saved and the game gives you "game saved successfully". When the game try to load, the expected filename can't be found and loading fails.
Another issue is with Mario Kart double dash, it seems that this game is saving the ghost data without providing a filename, and FAT32 require a filename so the beginning of the binary data is used as filename.
as a result, the data inside the file is incomplete. and also some characters used in the filename are incompatible with FAT32 because it's raw binary values and not compatible ASCII.
This is only some explanation. If you really want the technical details you should check DM/DML sources.