We have recentl upgraded to CRM 4.0 and applied Update Rollup 2. Now when we cancel a service Contract with a future date (i.e., if on 2/8 I cancel a Contract with a Cancellation Date of 2/28), the Contract is immediately cancelled. With 3.0, the Contract would remain active until the Cancellation Date was reached.
When you cancel a contract in CRM, it cancels immediately. I didn't have the experience in CRM 3 that the contract waited to cancel until the expire date. If a user selects to Cancel a contract it will cancel the contract regardless of the start and expire dates.
You might be able to write a plug-in that changes the behavior and makes the contract to wait until the expire date or you can just wait until the contract reaches the expire date and let the contract cancel or close itself.