If people would prefer some concrete metric as the deciding point for the switch for 3.x -> 4.0 ... how about "When either a third of the code present in 3.0 has been replaced, or the total lines of code doubles - whichever comes first".
That way you have a clear reason why you want to start the 4.x series - either because there is not much 3.0 left, or because the additions dwarf the original.