Oh, please; no, on more than one level.
Punishing the people who run the soup kitchen really isn't kind, and that is exactly what you are doing when you foist a "lazy" unwilling "volunteer" on them, for 16 hours, yet.
Also, where is it written that the the clients of soup kitchens are lazy and unmotivated? IME, most homeless end up that way because of issues of mental illness or substance abuse problems, and there are also plenty of people out there who are hungry because they can't find work.
I'm sure that the OP can find a punishment that gets the point across without having to punish innocent third parties in order to do it.
Me, I'd go with him to school and follow him like a puppy, AND I would either raid his bank account or force him to do home chores to pay me for the time off that I had to take to do it. I don't work cheap, either. Oh, and I'd change the locks on the house, too, and not give him his own key until the end of the school year, because obviously he can no longer be trusted to let himself in whenever he wants.
As to long-term ways to fix this, my first thought would be military service of some kind. However, like the soup kitchen folks, it isn't fair to foist an obstinate slacker onto the military, either. However, if he could be convinced to voluntarily sign up, it could be the making of him, and if it wasn't, they would soon enough kick him to the curb.
PS: I get the sense that the skipping itself isn't the crux of the issue, it is the breaking of rules around being alone at home with a girlfriend that seems to be bothering the OP more. I think the combination of sins here deserves a more serious punishment than what he might get for just skipping a half-day of school.