Why doesn't print module_invoke('user', 'block', 'view', 0); use template files? If I invoke the user login block using module_invoke it doesn't use block-user-0.tpl.php. If I drop the block in the right sidebar and print $right it does use block-user-0.tpl.php.

Also, why will it only print the block once so that printing $right and module_invoke only results in one login form?
The code module_invoke('user', 'block', 'view', 0) eventually calls user_block('view', 0). The user_block function returns an array in this case; that's just how hook_block works. The documentation for hook_block says:


  If $op is 'view': return an array which must define a 'subject'
  element (the localized block title) and a 'content' element (the block
  body) defining the block indexed by $delta. If the "content" element
  is empty, no block will be displayed even if "subject" is present.


If you want to know how to render this block, check this comment on the theme_block documentation page.