Next term, I'm teaching a Computer Science course at the University of Toronto in which graduate and undergraduate students will do some consulting and/or development work for real-world clients. The students have backgrounds in areas as diverse as network security, user interface design, machine learning, graph theory, and numerical analysis, so pretty much anything is possible --- the end-of-term flyer from last April will give you an idea of what they can do.
Here are the details:
Students can't get a grade for work they're being paid to do, so it has to be pro bono.
Clients in downtown Toronto are preferred (makes face-to-face meetings easier), but we've worked successfully with remote clients and open source groups before.
Pure coding projects are OK for undergrads, but grad student projects have to require some novel thinking as well (and that's preferred for undergrad projects too).
They have to be able to talk about their project in public, and use whatever code they develop after the project is over. This doesn't necessarily mean that projects have to be open source, but that definitely makes things simpler. (In the past, for example, students have sometimes had access to sensitive data that they couldn't share with others, but were allowed to talk about the algorithms they were using and the patterns they were finding---that sort of thing is doable.)