Hachoir (from Debian 3.1.0+dfsg-3) can parse the structure of a FAT image created by mkfs.msdos (showing first 0x200 bytes as Boot, then both FAT copies, and root directory), but on an image created by mtools (specifically mformat -i "test-mtools.img" ::.) it reports a MasterBootRecord partition table followed by only RawBytes, whereas those should be identified as a FAT.
Could this be the presence of a non-empty partition table causing 2 different dissectors to be used?