Other than the fact that I can't actually see your branch, I think I'm broadly happy with this; since you're just removing code, there's nothing for me to to do except check that it's really gone!
The references tasks Jim refers to in pipe_tasks are included in the forcedPhot.py file, so I think you've got them. However, in obs_sdss, note the following places you've missed:
- config/forcedPhot.py (I'm actually not sure if this config needs updating to match the new tasks in meas_base or if it can just be dropped, but it's certainly not correct as is);
- policy/SdssMapper.paf line 406 refers to lsst.pipe.tasks.forcedPhot.ForcedPhotConfig.
I also note that bin/ingest/ingestForcedSource.py in the datarel repository refers to both lsst.obs.sdss.forcedPhot and lsst.obs.lsstSim.forcedPhot. This code is pretty old, and I don't know if it's still relevant; you should find out before you remove that code from obs_sdss.
Finally – and this is not relevant for this issue, and may be more a question for Jim Bosch – why do processImage.py, processCcd.py etc live in pipe_tasks, but forcedPhotImage.py, forcedPhotCcd.py etc live in meas_base?