back in college the first problem set in my intro AI class was something very similar to this, except instead of maximizing the points scored on the current throw, it looked ahead and solved for the best "path" to get to zero points given your current score (in darts you win by reducing your score down to zero). Like the OP, I also remember being surprised by the fact that the bullseye wasn't the highest scoring point on the dartboard, but things get even more interesting when you look at the optimal strategy for actually winning the game.
This would make it much more complicated, but did your algorithm take into account the difficulty of hitting each scoring area too? That would be pretty interesting to have as an iPhone app or something.
Double 16 is most professional players favourite close out double because darts players tend to "line up" darts. Basically, they have a much better chance of hitting it on the second go if the first one was closer.
Double 16 is most forgiving because double 8 is above it. If they hit single 16 they can go to double 8 above it and if they hit double 8 above it, they go to double 8 again (requiring minimal or no correction)
There are some players who like double tops (20) but for the most part double 16 is the conventionally wise way to check out.