The most important part of career development is making sure that you're being challenged and learning new things wherever you are. Sometimes that means taking a bottom-rung software engineering position at Google, and sometimes it might mean being CTO of a startup. The answer depends a lot on what you've already done before, what you want to do in the future, and what specific skillsets you've identified as needing practice.
I've found that in general, it's harder to blaze a trail than it is to follow in other really smart people's footsteps. OTOH, there's something intrinsically educational about that difficulty itself. A lot, too, depends on whether you find yourself stagnating because you can't identify areas where you could do better (a big problem for big-fish-in-a-small-pond) or whether you find yourself stagnating because you're too overcome with inertia to change your behavior (a big problem for small-fish-in-a-big-pond).
BTW, I've also noticed that many people who think they're overqualified for great companies when they get their offer find that they're not overqualified at all once they get in. The public face of any great company is a tiny fraction of everything that goes on inside of them...that's how they got to be great, after all.
While I'm at a somewhat decent level at my current position, I don't see growth opportunities, at least in the way I want to grow. I'm wondering if starting again at a lower rung, but hopefully, in the right path, would be worth the "demotion" so to speak.
I hope you're right about the "find that they're not overqualified at all once" bit.
A better option might be to take a higher position/pay at a lousy company. At least then he will have a savings cushion to fall back on. There is no sense in trying to "climb the ladder"; some positions are so low that you can't possibly climb out of them. Try to grow from testing into lead dev, if you don't believe me.
Most of all, talk to the people giving you the offer. Make it clear that in a career sense this is a step down but you are considering it because that's how much you want to work for the company. Ask specifically what the growth path is or growth opportunities are for you there. I wouldn't expect them to make any guarantees but you can phrase it as: if I were to perform exceptional, then... You just want to make sure they know they aren't hiring a low level code monkey who will be happy doing the same thing 5 years later.
Edit: a job, even if below you, allows for savings and retirement matching, both of which allow you greater flexibility in the future.