I got it!
I fixed two bugs in the ripping code, and then discovered that the pattern tables are stored in a rather odd fasion. All of the upper-left tiles for a map tileset come first, then all the upper-right tiles, etc. So to assemble the first 16x16 tile, I need to look in the pattern table at entries 0, 128, 256, and 384 to see which 8x8 tiles to use. Strange, but I can't argue with the results it produced. :) I now have the town tileset in .bmp format.
The next step is to identify all of the distinct tileset + palette combinations. A lot of the dungeons in FF1 share the same tileset, and just use different color palettes (Gurgu Volcano's tileset is just a red version of the Earth Cave tileset). Since I'm just using straight 24-bit images instead of bothering with palettized textures (which aren't well-supported by graphics drivers), I need separate tilesets for these. But I don't want to rip a separate tileset for each map, since, for example, all five floors of the Earth Cave use the same tileset + palette combination. Once I've identified and labeled these, I can have the program spit out all of the unique map tilesets into their own folders. Then it's time for a little RLE-decompression on the map data.
In some other news, my Linux box died when I moved apartments. I think there's just a PCI card not seated properly or something (the motherboard and case have had fitment issues ever since I built the thing), but I just haven't had time to unhook everything and drag it out to check. It's acting as a headless server (not connected to a monitor or keyboard) because I usually just ssh into it, so fixing it is a pain. The result of all this is that my web server will be down until I get it fixed. Until then, I'll use the attachment system for updates.