A task group in Mesos will terminate when either all tasks are terminal or at least one task terminated abnormally (exit code != 0).
E.g., a valid state of a pod in Marathon is
> task1: Running
> task2: Finished
In this a case, the overall status of the instance is Running. If Marathon performs an explicit reconciliation for task2 in this case, Mesos will eventually send a status update that indicates that task2 is Gone, as it no longer exists.
On receiving this update, Marathon will interpret the overall instance status to be Gone, assuming the whole pod is not existing. A workaround is to not explicitly reconcile terminal tasks.
An improvement in the future would be to disallow changing a terminal task status to some other status (a task that is Finished should never become Gone).