If the user has a restriction (for example DISCHARGE) and you use the 'temporary override' button, it's possible to check out items with not for loan itemtypes. Even when AllowNotForLoanOverride is set to not allow override.
This sounds like a long standing bug. It will be hard to deal with that bug, the permission { circulate => force_checkout } allows to force the checkout if the patron has a restriction. When the forceallow flag is set, all other Allow*Override prefs are bypassed. I guess we should deal with the permissions differently than the Allow*Override prefs.
I think it's a mistake in the logic, the override for restriction should just allow you to 'unlock' the circulation, not override all other rules. But yeah, probably not an easy fix.