I think Rob's version of pvrinput has already the code for calling the externchannelswitch-script in "case eTelevision" and not only in "case eExternalInput". (Otherwise it wouldn't work at startup).
The code in ProvidesChannel() and SetChannelDevice checks not only for the same frequency, but also for the channel number:
if ((Channel->Number() == CurrentChannel.Number()) && (CurrentFrequency == Channel->Frequency()) && (CurrentInput == input) && (CurrentNorm == norm))
When Rob switches to another channel number, pvrinput should return needsDetachReceivers = true in ProvidesChannel(). It should also get a call for SetChannelDevice().
The problem is that both functions are never called - but obviously only in combination with running streamdev.