Abhijith,
It’s good that you are able to see it working from one place ie., MWS. You can nail out the reason.
When you perform the operation on UI, there are set of task API executed behind that makes process to complete. What task API’s are triggered while acting on it can be found out by enabling ‘task audit’ by logging into MWS using sysadmin. Once done, perform the operation from MWS by accepting and completing the task. In task audit view as well as in the full.log file, you can find out all the task API’s that got executed for updating the task that made process instance complete. Compare this task API calls with the logic that you performed in IS/PE flow service and see what’s missing.
Personally, I like Task Engine very much. It has got amazing capabilities, but sensitive. It becomes even more interesting when there are concurrent execution of tasks in a clustered environment (task engine cluster), race conditions, locking/unlocking during task updates and several other optimizations needed to achieve quality of service. 
Try it and let us know.
Regards,
Senthil
#webMethods#BPM