convertFieldNames() could potentially generates conflicting names (i.e. what happens when 2 fields are named first-name and first_name in the same document) But since a user can use a different conversion function, it may not be too big of a deal.
The fields' name need to be better handled to prevent PHP code injection in the convertTempate() method.
convertTemplate() should be split from the base class into separate classes to allow the support for any template engine (Savant, Smarty, etc...)
Philippe's point about convertFieldNames() could certainly make for a nasty-to-debug problem if it caused $first-name to collide with $first_name. Maybe consider making it default to changing one dash to three underscores, which will avoid such a 1-for-1 collision, plus it would make the converted variable stand out more when viewed in a debug session.