(a) avoid using entities. Because I only ever use XML via
XSLT, processing-instructions are much more manageable.

(b) if I do use entities, don't rely on them remaining
intact - i.e. there should be no difference in information content between an
entity and its expansion (so you can always re-entitize mechanistically if you
need to).

(c) preprocess, as suggested, to replace the ampersands by
something else: for example <?ent mdash?>.

If I have data with character
entities such as &sect; or &mdash; in the XML, what is the best way to
keep those intact, as is, after a parse. Are there any parsers that have
an option not to resolve entities? What is the best way you've found to
deal with this issue? Do you escape the ampersands (e.g. &amp;sect;)
in a pre-process? Do you address it in an entity handler to re-write the
original entity text? This seems like a real pain that must have a
common solution.