As you see, the first argument to the shell depends of wheter or not there is a command to be executed. Don't ask me why, I could not find the reasons for that in the manpages.
No, refering to the perl-version, I just experimented a bit: and found out I need to pass "-" as first agrument for interactive shells and "-sh" for non-interactive shells. Only if I do it that way, the shell processes it's profile in both cases (interactive- and non-interactive).
About the ksh stuff: I'm not really sure and guess you are right, I get a headache even if I have to start ksh... For now: I know it works, and has worked this way over the last 15 years, on various linux/solaris systems.
You remark about need to sett HOME first is absolutely right, that is what I do (but forgot to mention).
In general: I modify %ENV a lot before calling the sub-shell.
The main reason: we use such sub-shells for building software in a re-producable manner. I need to rely on the fact that the environment in the sub-shell does not depend on environment changes in the ancestor of the shell (so: I do NOT just import %ENV).
Some other reasons: I need to inherit terminal-features in my subshell and XAUTHORITHY/SSH for example.
We use a specification file, in which we specify the dependencies between the ancestor shell and the sub-shell. This goes beyond the topic of this forum though. It is more something for a SCM-forum.