$_FILES superglobal array key is not what file.inc expects
I don't think it's a bug.

$_FILES['files'] is hard-coded into file_save_upload().

I believe you need to change how you construct your #name property.  The usage example in the Form API does it like this:

'#name' =&gt; 'files[' . implode('_', $element['#parents']) . ']',