I worked with a person once who always seemed to make the simple complicated. Part of it stemmed, I think, from a sense of inadequacy. He had a drive to demonstrate that he was a better programmer than people thought he was. Unfortunately, the complexity often overwhelmed him (and the project). Projects ended up taking longer than they should, features would be left out, a lot of it wasn't tested as well as it should be, and there were subtle, and not so subtle, bugs. Often, I'd end up taking over the project and fixing/refactoring it into something reasonably stable and usable. Often that meant stripping a fair amount of code out and replacing it. I've got one that, in order to add any new features to, I'm simply going to have to do a rewrite because it's not scalable.
I wish I could say that the story had a happy ending. I tried working with him using TDD and other agile techniques to identify the critical stories and develop them incrementally, but he tended to view this as a rejection of him rather than an attempt to help him gain the confidence not to "over develop." Eventually, he was encouraged to find another position though a series of management actions.
In the end I think you need to figure out why the drive to complication exists. Each situation is probably different, but understanding the motivation is key to knowing how to help. Ultimately, the person has to be teachable for you to have any impact. As long as there is improvement and it doesn't affect the team or your projects, keep working at it. Once the progress stops or you find that you've reached an impasse, it may be necessary for both party's sakes to encourage him to find a place that's a better fit.