It does indeed look like we don't have good documentation for the details you're interested in. Let's see.
post-parser size […]
As far as I know something like this doesn't exist as a technical limitation in MediaWiki. A page's final HTML can be much bigger than 2 MiB.
Post‐expand include size […] added some more templates and started saving while substituting them […]
That's a really nice approach to explain how the "post-expand include size" works. I like it. However, there are some special cases to consider, most notably Lua modules.
The limits for classic templates work as you described. Every single usage of a template (including all nested sub-templates) is effectively substituted. What's counted in the end is the total size of the resulting wikitext. In other words: not only is a template's source code counted. It's counted as often as the template is used.
Lua source code doesn't count. Lua is executed with other limits in mind (runtime and memory usage). What still counts is the size of the wikitext snippet that's returned by the Lua module. I might miss something else, but I guess the reason you get confusing results is because we can't simulate this process by manually substituting {{#invoke:…}} calls.
Best Thiemo