See Case IsClosed Trigger Bug?
This is not a bug. Currently the setting of this value is not done
until the save which comes after the before trigger in the event
timeline.
There are two workarounds available for you I believe:
1) Execute your logic in an after trigger. This occurs after the save
and thus the value should be set. 2) Query CaseStatus with the value
provided by the user for the status to determine if it is flagged as a
closed status.
Which one you take would depend on whether you need to modify the
object in any way since this is allowed in before triggers but not in
after triggers.
Sounds like the easiest approach may be to use an after trigger instead.