It's OK that they finish a job before sleeping, but I think they don't even check between "repeat" jobs. The problem before was in cooking or brewing... they'd have perishable ingredients at the workshop and then drop everything to go have a drink or a sleep.
It only checks every so often, not at the end of a job.
It should be where when a dwarf is occupied with a job currently during which he gets hungry/thirsty/tired, and then once he's finished with that job he goes off to naptime.
But how the game is working at the moment is where it seems to only check every X period of time. Maybe once a month? Its not that often.
This means that all of my dwarves are all hungry, thirsty, and tired all the time, even though my stockpiles are overflowing with delicious roasts and booze, and there are beds everywhere. Everyone is unhappy because of this.
If I have a large number of jobs to get done and the dwarf gets hungry during his current job, he should go eat something before going onto his new job. It shouldn't interrupt the task he's currently on, but it should
prevent him from picking up a new task until he eats/sleeps/drinks, but it seems the checks are too far apart.
I'm not sure if this is a bug or intended behavior, but it certainly is harder to keep everyone ecstatic now.