It turns out the scan command from the linuxtv-dvb-apps package (on Ubuntu Hardy Heron, anyway) isn’t writing the correct channels.conf, and this makes some channels not work for me, including CBeebies, CBBC Channel and CITV.
The fix is to do as this person did: http://ubuntuforums.org/showthread.php?t=686829.
Basically, the kaffeine TV viewer scans the channels fine so you can manually copy the values you need from its config file.
The incorrect channels have “0:0” as the second-last and third-last numbers in their row in ~/.mplayer/channels.conf .
Those two zeros should be replaced by the first two numbers you find in the row for this channel in ~/.kde/share/apps/kaffeine/channels.dvb . You can ignore the numbers in brackets in this file.