The problem with the whole "I don't think this is a good fit" angle is project owners will then try to convince you why it should be an excellent fit, and they're often not wrong. If you advertise yourself as, say, a full-stack web app developer, it's difficult turning down someone asking you to help out on a generic web app.
The second thing I tried is reasoning with people by letting them know why I personally think the project is a bad idea, or is not salvageable. Unsurprisingly, it's almost impossible to do this without insulting them, or without inviting responses like "well, then maybe you're just too incompetent for this".
So the only thing that actually works in my experience is: "sorry, I'm fully booked at the moment, so I can't take this on". The beauty of this approach, even though I recognize it's morally questionable, is that it's an entirely realistic reason. In fact, it's the exact same response I send out when I am indeed fully booked. You leave that person behind with a neutral impression, and they still feel good about their project (which is important because I could be very wrong in my judgement of it).