Despite its name GameEvents.CityConvertsReligion fires when the follower count changes.
Code:
if(eMajority != eOldMajorityReligion || iFollowers != iOldFollowers)
{
CityConvertsReligion(eMajority, eOldMajorityReligion, eResponsibleParty);
GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);
LogFollowersChange(eReason);
}
The C++ function CityConvertsReligion eventually fires the lua event. It would be much convenient and intuitive if it only fired when the majority religion changed, but I do have some lua code that listens to the GameEvents.CityConvertsReligion does some filtering logic and fires off a lua event only when a city's majority religion changes.