画面の回転状態は通常
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
で取れるが、これだとunknownやfaceup/downが返ってくることがある。

unknownはシミュレーターだと、横向きにした状態で、XCodeからアプリケーションをRunした場合等になる。

しかし、unknownが返っている場合でもシステム側は現在の向きを保持していて、アプリケーションを立ち上げた時には、ステータスバー等は画面の向きに正しい方向に表示され、アプリケーション内にAutosizingで配置してあるボタン等も画面の向きに合わせて正しく配置される。
なので、少なくともアプリケーションはunknownの場合でも画面の表示する向きは少なくとも知っている。
いろいろ調べてみたら、あった。
ステータスバーの状態でした。
なので、画面関連のレイアウトで4方向のみを確実に調べる時は、これを使用する。
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
ちなみに、xxxxx-info.plistで、 ステータスバーを起動時から隠す設定をしてあっても、正しく認識できます。
Status bar is initially hidden = YES