Respostas:
Depende do que você está construindo. Você pode até conseguir usar apenas o Core Animation se não for intensivo em gráficos (meus últimos dois jogos foram baseados em aproveitar o Core Animation).
Se você planeja enviar muitos gráficos, eu recomendo o Cocos2D para o seu jogo em 2D. É baseado no OpenGL ES e até agora estou gostando muito. A curva de aprendizado tem sido relativamente suave.
E muito mais. Eu iria baixá-lo e jogar com alguns dos exemplos que eles incluem, que demonstram grande parte de sua funcionalidade.
Pela minha experiência, a maioria dos jogos 2D no iPhone são escritos em OpenGL ES. A demo do jogo em 2D também está escrita em OpenGL. Eu iria com o OpenGL, apenas porque é mais provável que você encontre muito mais recursos para problemas relacionados a jogos no OGL, em vez do CoreGraphics.
Existem também alguns recursos no nível do sistema operacional que tornam o trabalho no OpenGL menos doloroso do que em algumas outras plataformas. Por exemplo, você pode usar a classe NSString para renderizar em um contexto OpenGL e obter suporte completo e dinâmico a Unicode logo de cara.
Em poucas palavras, eles se concentram em propósitos diferentes.
CoreGraphics: Composição e gráficos vetoriais. Se você precisar apenas deles, o CoreGraphics é uma boa escolha.
CoreAnimation: animar camadas de objetos 2D.
O OpenGL fica abaixo desses dois (e CoreImage / CoreVideo também). Em virtude de ser de nível inferior, ele oferece um maior grau de controle. E exige que você faça mais trabalho ao implementar as coisas.
Realmente, depende do que você precisa fazer. E assim que você pensa em portar esse jogo para outras plataformas, o OpenGL parece muito mais atraente, já que é suportado praticamente em todos os lugares.