For example Serial.println( F( "Hello")) puts the "Hello" in PROGMEM memory.
No, it doesn't. The compiler put the string "Hello" in PROGMEM. Without the F() macro, the compiler would have generated code to copy it to SRAM, too. With the F() macro, that code is not generated, and the string is not copied to SRAM.