When a storage contract expires, is data deleted right away?
Undefined by the protocol specification but in practice almost certainly not. The expiring piece will almost certainly be part of a sector with other, unexpired pieces and so the expiring piece can’t really be deleted separately from the sector.
Will a Filecoin node then include automatic sector deletion when all pieces in a sector have expired?
I don’t think any deletion is implemented yet, so that’s TBC. No doubt some kind of re-packing will be needed to optimize space as deals expire.