The first-declaration-wins rule is found surprising by many, but it has proved to work pretty well over the years of SGML experience. The practical effect is, that since the internal subset of the DTD is considered to appear "first", you can put entity declarations there to override those in the external part of the DTD.
Copyright © 1998, Tim Bray. All rights reserved.