In addition to your reasons, I would add the following:
- Unwillingness to learn. If you’re not perfectly fluent in the most relevant programming language for a job, but have shown to be willing to learn and have learnt other programming languages in the past, or provide other value (such as useful knowledge in another relevant area), this flexibility can be valuable to a company.
- Culture fit/project fit. You might be a perfectly capable and eloquent programmer, and still be the wrong person for a job/project in a particular company.