Unwanted shut down of outputs.

The code looks correct, although I had to correct that horrible indentation before I could convince myself about that. Isn't this clearer?

void loop()
{
	val = digitalRead(switchPin);      // read input value and store it in val
	Serial.print("val=");
	Serial.println (val);
	delay(10);

	val2 = digitalRead(switchPin);      // Read input again to check for bounces
	Serial.print("val2 =");
	Serial.println (val2);
	if (val == val2)
	{
		if (val != buttonState) 
		{
			// the button state has changed!
			if (val == LOW) 
			{                
				// check if the button is pressed
				if (lightMode == 0)
				{             
					// Check status of lightMode
					lightMode = 1;                     // Sets lightMode to high, LEDs ON
					digitalWrite(LED1,HIGH);
					digitalWrite(LED2,HIGH);
					digitalWrite(LED3,HIGH);
					digitalWrite(LED4,HIGH);
					digitalWrite(LED5,HIGH);
				}
				else
				{
					lightMode = 0;                    // Sets lightMode to Low, LEDs OFF
					digitalWrite(LED1,LOW);
					digitalWrite(LED2,LOW);
					digitalWrite(LED3,LOW);
					digitalWrite(LED4,LOW);
					digitalWrite(LED5,LOW);
				}
			}
		}

		buttonState = val;  // save the new state in our variable
		Serial.print("buttonState =");
		Serial.println (buttonState);
	}
}

I suggest you remove the Serial.print statements at the top of loop, and put one inside the block of code where "the button state has changed!" so you can see whether you're getting spurious switch inputs. Maybe the switch wiring has the odd glitch. Also put a print statement in setup(), or make it go through an obvious LED flashing sequence, so that it's obvious if the board has reset.