The documentation for this event (here) claims that the boolean opened state can be found in event.detail.opened:
Fired when the `core-overlay`'s `opened` property changes.
@event core-overlay-open
@param {Object} detail
@param {Object} detail.opened the opened state
However it's actually placed in event.detail itself (here):
this.fire('core-overlay-open', this.opened);
One of these should be changed to match the other.