Just in case you still need the answer, or someone else stumbles onto this, I've done the same thing and got it working, but there are a couple of hoops you have to jump through.  In order to rotate a UITabBarController's view, there are four things you have to do:
- Remove the status bar before switching to the view
- Rotate the view to the new frame
- Add the status bar back to the view
- Switch to the view.
I've got a RootRotationController that does this that looks like this:
@implementation RootRotationController
#define degreesToRadian(x) (M_PI * (x) / 180.0)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if ((UIInterfaceOrientationPortrait == interfaceOrientation) || (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation)) {
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
    }
    // Return YES for supported orientations
    return YES;
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];
    if (UIInterfaceOrientationLandscapeLeft == interfaceOrientation) {
        self.view = self.landscape.view;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
        self.view.bounds = CGRectMake(0, 0, 480, 300);
    } else if (UIInterfaceOrientationLandscapeRight == interfaceOrientation) {
        self.view = self.landscape.view;
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
        self.view.bounds = CGRectMake(0, 0, 480, 300);
    } else if (UIInterfaceOrientationPortrait == interfaceOrientation) {
        mainInterface.view.transform = CGAffineTransformIdentity;
        mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0));
        mainInterface.view.bounds = CGRectMake(0, 0, 300, 480);
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
        self.view = mainInterface.view;
    } else if (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation) {
        mainInterface.view.transform = CGAffineTransformIdentity;
        mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
        mainInterface.view.bounds = CGRectMake(0, 0, 300,480);
        [[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
        self.view = mainInterface.view;
    }
}
In addition, you should know that shouldAutorotateToInterfaceOrientation is called just after adding the root controller's view to the window, so you'll have to re-enable the status bar just after having done so in your application delegate.