Apparently -D arguments are passed straight to the JVM, whereas -M arguments are passed to the mule runtime. It is recommended to use -M -D when passing arguments at the command line on a customer hosted server, and to use -D in wrapper.conf for permanent properties.