The rule is that miners must mine on the longest chain even if it is only slightly longer than another chain. Since blocks are created at random, a situation where there are rival chains of the same length is highly unlikely to persist for long under normal conditions. See the Bitcoin whitepaper, where the mechanism currently used by Ethereum was first described: https://www.bitcoin.com/bitcoin.pdf
If the network becomes partitioned so that half the miners are unaware of the blocks created by the other half, this could create long divergent chains. Ultimately one would be longer than the other, so the situation would be resolved one way or the other when the network partition was fixed. However, until this happened nodes that were unaware of the partition could be assuming that transactions were adequated confirmed, because they were many blocks deep, only to later see them orphaned when the partition was resolved.
This problem can be somewhat migitated by clients paying attention to the hashrate, and warning the user if it drops. (This will also help with situations where the user is maliciously isolated from the network and fed a shorter chain.) However, a drop in the hashrate can also occur for other reasons, and in theory a partition could coincide with an increase in the total hashrate.
The problem should be solved, or at least greatly improved, if and when Ethereum moves to Proof of Stake: Clients will have a list of validators who they expect to be online, and the network shouldn't be able to finalize blocks if half of them have disappeared to the other side of a network partition.