Where to insert the break; line in my code?

What you need to do is read what you got from BT only once in the loop()

If you received something, then do a if/else or switch/case on what you have received to set a flag accordingly - you need to cover ALL the possibilities you want to support there because once you have read this data it is gone. then based on the flag, if it is a new command (you are changing stage - assuming you want to act only then) do what is appropriate and go wait again for a legit command to arrive

enum _states : byte {turnedOFF, book1, book2, book3, unknown} status;

void setup()
{
   ...
   status = turnedOFF;
   OFF(); // start with everything off
}

void loop()
{
  boolean newCommand = false;

  if(BT.available() > 0)  {
      _state newStatus = unknown;
      switch((char) BT.read()) {
          case ‘o’:
              newStatus = turnedOFF;
              break;

          case ‘1’:
              newStatus = book1;
              break;

          case ‘2’:
              .... // <— I let you finish
      }
      if (newStatus != unknown) {
            newCommand = (newStatus != status);
            status = newStatus;
       }
   } // end if BT available

    if (newCommand) {
       // we changed status handle it. 
       switch (status) {
           case turnedOFF:
              OFF();
               break;

            case ....  // <== I let you finish


       }
    } // end if new command 
} // end loop()

Just typed that on my tablet so might have some typos - for you to get the concept