That depends. Are these always going to be the same files? Or are these files you may be inclined to change, depending upon which installation you have, or some other criteria?
Rather than describing media files as “files uploaded by the user”, think of them as “files supplied after deployment.”
Note: You are also a user - you might be the admin of the site, and so there may be files you want to change post-deployment, without needing to redeploy the site.
If they are files being deployed with your system, then they would be static files and not media files. (For example, a logo for your site might be a static file, if all deployments are going to use the same logo. However, it you’re going to have multiple deployments with different logo files, you might want to make that a media file.)
That is correct.
That is not correct. Again, the idea of these media files are that they’re supplied post-deployment. Because they are files being written by Django, you do not want them being written anywhere within your project directory structure. In what I would consider a “production-quality” deployment, your MEDIA_DIR is a directory set aside for specifically this purpose.
Also keep in mind that in a production-quality deployment, Django would not be serving either media files or static files. That’s something that your webserver would be doing. (See Serving Media files from nginx as one of the topics on here talking about deployments of media and static files.)
Regarding the media file issues, I’d suspect some type of file corruption with how the files are being copied, but that’s pure conjecture.