Is my understanding of sleep modes in arduino correct?

So after doing some reading both the forums, and various internet sites, I think I have an understanding of reducing power by putting things to sleep, but I'd appreciate if someone could confirm my understanding.

I've got the following code:

void sleepNow()
{
  /* Now is the time to set the sleep mode. In the Atmega8 datasheet
   * http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf on page 35
   * there is a list of sleep modes which explains which clocks and 
   * wake up sources are available in which sleep modus.
   *
   * In the avr/sleep.h file, the call names of these sleep modus are to be found:
   *
   * The 5 different modes are:
   *     SLEEP_MODE_IDLE         -the least power savings 
   *     SLEEP_MODE_ADC
   *     SLEEP_MODE_PWR_SAVE
   *     SLEEP_MODE_STANDBY
   *     SLEEP_MODE_PWR_DOWN     -the most power savings
   *
   *  the power reduction management <avr/power.h>  is described in 
   *  http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
   */

  set_sleep_mode(SLEEP_MODE_IDLE);   // sleep mode is set here

  sleep_enable();          // enables the sleep bit in the mcucr register
  // so sleep is possible. just a safety pin 

  power_adc_disable();
  power_spi_disable();
  power_timer0_disable();
  power_timer1_disable();
  power_timer2_disable();
  power_twi_disable();

  sleep_mode();            // here the device is actually put to sleep!!

  // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
  sleep_disable();         // first thing after waking from sleep:
  // disable sleep...

  power_all_enable();

}

So my understanding is to enable power saving features, I call "sleepnow();" where I want the chip to go to sleep.

What I'm questioning is how I implement this. I'd like the device to go into power saving mode if no data is received on a SoftSerial line (tied to pins 5 and 8). Since this is not a UART line, is there a way to tie an interrupt to a non interrupt (INT0,1) pin? I cannot use INT0-1 because they're already being used. if not, since this is the lowest power saving mode, would something like the following work?:

if (Bluetooth.available())   //NewSoftSerial on Digital pins 5 and 8)
  {  
     .
     .
     .
  }
else 
{
delay (10000);  //Delay 10 seconds if Bluetooth connection is not available
SleepNow();   //start power saving
};

If not, is there a way of modifying the sleep routine to save as much power as possible? I'm not using the ADC or SPI features, and I need the Softserial available immediately if data comes in (can't wait for it to wake up). An alternative I suppose would be to attach an interrupt to an unused pin, and then tie the bluetooth modules status led (goes high when a link is established) and use that to wake the processor as soon as a connection is made....

Thanks.

I think what you have should work, I use a slightly different approach, based on this paragraph from the AVR-libc User Manual.

As the sleep_mode() macro might cause race conditions in some situations,
the individual steps of manipulating the sleep enable (SE) bit, and actually issuing
the SLEEP instruction, are provided in the macros sleep_enable(), sleep_-
disable(), and sleep_cpu(). This also allows for test-and-sleep scenarios that
take care of not missing the interrupt that will awake the device from sleep.

On the ATmega328, virtually any pin can be configured for a "pin change interrupt". Are you really using an ATmega8 (per the comment)? I don't think the ATmega8 has the pin change capability. I've configured multiple pins on an ATmega328 for pin change interrupt, so pressing any button on the device wakes it.

Not sure how tricky it might be to catch the first character on serial input, the sleep and wake-up sequences might be critical. Also not sure if SoftwareSerial uses any interrupts, actually that could work out well if it does.

The block of code was taken from here:http://rubenlaguna.com/wp/2008/10/15/arduino-sleep-mode-waking-up-when-receiving-data-on-the-usart/ I think they just referenced the mega for part of the commands. I looked at the power.h header file and it contains a bunch of Atmel chips, definately the 328p.

I ended up having routing issues in my layout, so to make things easier, I've switch from port D to B for a display connection. This frees up one of the hardware INT lines (INT1), however I've been reading about the PCINT abilities as well. I'm not really interested in a super-deep sleep mode, as my entire circuit only draws around 60-80ma at most (the biggest offender is the 2-4 SURE Electronics LED matrix displays that are connected to this, drawing around 500ma -1.2A total) I'm interested in trying out the idle mode first, along with disabling the ADC and SPI features, among others, to get maybe a 2-10x savings in usage. My project is a LED Sign for Cubes/Vehicles/displays, that is powered via either a 2000mah or 6000mah 3.7v lithium battery, which by my calculations gives around 2-6 hours of usage. If the display is not repeating a message, or has not received input, I figure might as well save as much of that power as possible when idling.

If it is absolutely necessary to first transmit some data before the actual serial data comes through, it's not a hard thing to do, I can just append some garbage to the front of my data going over bluetooth, so that the garbage bytes wake up the board in time to receive the real stuff.

I'll have to give it a try this week along with my volt meter to see how this works out... thanks for the reply, I'll do some digging this week/weekend to test some stuff out.