This is because drush_shell_exec() parses the arguments through sprintf. So when sprintf encounters %20 in the command string, it looks for the 20th argument which is obviously not there ;-).
Also see the drush api documenation on http://drupalcontrib.org/api/drupal/contributions--drush--includes--exec.inc/function/drush_shell_exec/7 which documents the parameter $cmd.
I submitted a pull-request which solves this: #15.