There are many choices for a mobile 2D game engine. There are even multiple free, open source ones. So far I've been able to narrow it down to two engines that look promising: Cocos2D and Moai. Both of these are free and open source and seem to have an extensive community supporting them. The company that creates Moai has some extra services you can pay for, but it's not required.
Cocos2D seems to have the advantage in thorough documentation. Also, it was created with the iphone in mind, so it's easy to integrate. The big disadvantage is that it only runs on the iphone. Moai will compile to iphone, android, or even a desktop app. Also, Moai has a video of Tim Schafer extolling its virtues. I love Tim Schafer. The main thing I don't like about Moai is that the interface is Lua. I'm just not a big fan of dynamically typed scripting languages. At least not for performance critical applications like games. Too much going on under the hood. Also, arrays in Lua start at 1 instead of 0. That bugs the hell out of me. (I know, they aren't really arrays. But still.)
So I think I'm going to stick with Cocos2D for now. I don't want to have to worry about multiple platforms at this point anyways. If my game is successful, I can always port it to Moai. The engines can't be too different, right?