Wasted lines is a syntax sugar problem. It can be solved in the language level. Python for example has dict destructuring where you can solve this in under 10 characters. You could also imagine wrapper functions to execv taking in modifications to env only, that it merges with the inherited env.
Copying is something that happens anyway if you write to the environment after fork, due to the copy-on-write model used by forking.
If you don’t need to edit the environment at all, one could imagine a pure inherit option used.
Besides, what size is the environment variables anyway? There are many other bigger bottlenecks if you are launching processes frequent enough for this to matter.