A small issue, when you switch a girl at the House from Recruiter to Head Girl, the Head Girl job will only be applied to the current timeslot (I assume this is because it is clearing the Recruiter job from the other slot after it has been changed to Head Girl). Whether Head Girl is applied to the Day or Night shift, if the other shift is Time off then the whole day is considered Time off.
On a barely related note, the whole Free Time/Time off split is a bit odd, especially when I occasionally find girls set to Free Time in a building which doesn't even have that as a job (can't pin down the exact cause of that, but I'm pretty sure it only happens when I transfer them to a different building).
Edit: Decided to poke around in the source code myself. Seems like the check used the logic "if not Recruiter or not Head Girl" (which is always true), instead of "if not Recruiter and not Head Girl". Basically, replace the || with && in the statement (u_int(JobID) != JOB_HEADGIRL || u_int(JobID) != JOB_RECRUITER)
in cJobManager.cpp and everything will work just fine.