So where do we stand? The key question is what do we want AtomType to mean?
In molecular mechanics packages atom types are usually separated from
the PDB atom names (they are defined in the forcefield). Multiple PDB
atom name/residue name pairs can map to a single atom type.
To avoid confusing our users we should probably not refer to "PDB atom
types" anywhere, because what you are calling an atom type is really an
atom name.
I think types that are not globally unique is just asking for trouble
long term, so my vote is for 2, where the unique type name is derived
from one of the existing lists of unique atom types (e.g. CHARMM or
Mol2). This is distinct from the name of the atom, however, so a given
atom Particle would need both a type and a name to play nicely with both
PDB and forcefields.