Thanks Wiedenmaier - we have a winner!
Inkscape is indeed the best solution. At first I was using ghostscript for EPS-to-PDF, then Inkscape for PDF-to-SVG. But then I found that Inkscape also supports EPS as an input format, thus providing single-step conversion. And most importantly, it preserves the text as editable strings in the output SVG file.
After you write out XML from FrameMaker with EPS files, you can use the following linux command to convert the EPS files to SVG files one-by-one (the -z option suppresses the GUI):
find ./xml -iname "*.eps" | sed 's/^\(.*\)\(\.eps\)$/-f \1\2 -l \1.svg/' | inkscape -z --shell
If you have many figures, you can use Inkscape's shell mode to convert them in batches of 20 for a bit more speed (I got spurious file-in-use errors if I pushed the batch size too large):
find ./xml -iname "*.eps" | sed 's/^\(.*\)\(\.eps\)$/-f \1\2 -l \1.svg/' | split -l 20 - inkscapetmp
ls -1 inkscapetmp* | xargs -n1 -I {} sh -c "cat {} | inkscape -z --shell; rm {}"
After you've converted the figures, update your *.e* FrameMaker XML entity files to change .eps references to .svg:
find ./xml -type f -name "*.e*" -print0 | xargs -0 sed -i 's/file="\([^"]*\).eps"/file="\1.svg"/'
If you see "** (inkscape:20347): CRITICAL **" warnings from Inkscape, you can ignore them. To suppress them, prepend dbus-run-session to the inkscape command as described here.