In general, behaviour of Portmod should follow the Ebuild Package Manager Specification. It is not the intention of this project to completely implement this specification, however when features are implemented, they should be done following the specification as closely as possible (primarily to take advantage of Portage's extremely good documentation).
To be more specific, Portmod implements a subset of eapi 7, the current at the time of writing, and deliberately excludes features that are deprecated as of eapi 7. Differences from the specification are generally considered bugs or unimplemented features, except in the following cases:
Portmod uses the term mod in place of the term package (or pkg). While mods are also packages, and there would be no inaccuracy in referring to them by that name, this is done as it is the more familiar term to the OpenMW community, and because it is Portmod after all.
Portmod uses python to parse build files, rather than bash. This is done both to allow portmod to run on platforms such as windows where bash is not easily available, as well as to reduce the amount of work necessary to create the environment for the build files. Portmod also takes advantage of Python's classes for inheritance, rather than implementing eclasses, meaning that build files include the definition of a Mod class, rather than just being a collection of variables and functions.
Portmod, as it does not implement profiles, uses the metadata directory of the repository to store the files that would otherwise be included in profiles.
Portmod uses YaML rather than XML for metadata files. While YaML lacks tags, it is unlikely that we will need them, and YaML is generally more readable.