All of the answers here seem to focus on India, so I thought I'd give a more global explanation.
Each mobile network has a Mobile Country Code (MCC) and a Mobile Network Code (MNC). A SIM card has a single home network, which is identified by a MCC/MNC tuple, a combination of these two. A Roaming network is identified by a differing MCC/MNC tuple.
Usually a single carrier has a single MCC/MNC tuple in use, and the same network is used for all SIMs. However, in some cases, a network can use another carrier's network but still act as a home network. Usually this is the case with MVNOs (Mobile Virtual Network Operators). They lease the network from the actual owner under their own brand. One example of this is the Finnish Saunalahti, which leases Elisa's network.
In India (and a few other large countries), each circle has a separate MNC for each carrier, which results in the situation you've described. If a SIM has a home network in a circle (e.g. Vodafone in Chennai has the MCC/MNC 404/84), when the phone moves to another circle (e.g. Karnataka 404/86), the tuple doesn't match and roaming is shown. However, since both networks 86 and 84 are Vodafone's, no roaming charges are added.
If the phone shows roaming even in your home network/region, it's possible that the SIM has the wrong circle's home network MCC/MNC tuple.
The differences between devices can occur if some devices check the HLR (Home Location Register) of the carrier to see if the SIM is in a "home" network (i.e. a different MCC/MNC but the same carrier) and some jump to conclusions based on just the MCC/MNC values.
References: