I don't have the code with me right now, but I can give you some ideas:
1) Have the robot calibrate itself based on the ambient light in the room when the robot first turns on and base its light detection off that. This way it'll work in a bright room or a dark room and not have problems with a static difference threshold.
2) Try to implement different kinds of movement functions. For example, have the robot start out with a wide turn as it first detects a shadow and make the turn sharper the longer it stays in the shadow. I just thought of this now, actually, and I'll probably try it when I get home
In theory, I think it should work around the problem of hitting a shadow edge dead-on (where the same amount of darkness is detected by both sensors, so the robot continues forward), and maybe smooth out the motion a bit.
3) Get the IR rangefinder sensor. It makes the robot a-whole-nother beast and is really interesting to play around with. I implemented mine without the servos (stationary on the front of the chassis). I used this so that my robot can avoid obstacles as it's searching for light. If you program the robot to move forward in a subtle 'S' pattern, you can create a field of detection that is wide enough to keep the sides of your robot from hitting anything (accounting for the narrow width of the IR beam). Works pretty well on mine!