As per the discussion in this thread, fixed the issue. Now when user will change shipping method or shipping address below given process will take place:
1) load cart from order
2) Check if shipping address is changed (new address can be added or existing address of party can be used), then get all the shipping methods based on changed address and see if existing shipping method of order is available in new list of shipping methods. If existing shipping method of order is available then you are good and then load the cart. All the recalculations will be done .
3) If existing shipping method of order is not available in list of shipping methods returned based on new address, then choose the first shipping method from the list of shipping method and set it into the cart. Now save the cart into the order. Again all the recalculations will be done. Message will be shown to user to inform that new shipping method is set because last one was not applicable based on the given address.
4) If only shipping method is changed and address is not changed, then simply load cart and save the cart. All the recalculations will be done.
Added new service "updateShipGroupShipInfo" which will do all the above work. Also added new SECA rule and triggered "resetGrandTotal" service on "updateShipGroupShipInfo" service to reset grand total of order because saveUpdatedCartToOrder method does not take care of that.
Have tested this patch and now every thing works as per the expectation.