Why does Serial.print print out the wrong thing?
You've stumbled across the difference in the C++ language between a String and an "array of characters". What you gave Serial.println() was an array of characters:

Serial.println("Flame: "...);


and then tried to add a number to it.

Serial.println("Flame: " + flameState);


If it had have been a String, then what you typed would have been fine:

String flame = "Flame: ";
Serial.println(flame + flameState);


Adding (literally +) a number to a String adds characters to the String to represent the number. Unfortunately you didn't start with a String, you started with an array of characters:

"Flame: "


Adding a number to THAT changes where the array starts. flameState must have been 1, and "Flame: " + 1 would have been "lame :" - as you found out!

The version that worked did so through a little bit of magic:

Serial.print("Flame: ");
Serial.println(flameState);


The first line called a version of print() that accepted an array of characters and printed each of them out. The second line called a different version of println() that accepted a number and printed out its representation as a series of characters (digits) - followed by a new line (the ln part of the name).