When you use a default name for a section, like ".text", the assembler automatically assigns attributes like "allocatable" and "executable" to the section. When you use a non-default name for a section, like ".multiboot.text", the assembler does not assign any default attributes.
The "allocatable" attribute tells the linker that the section will be loaded into memory, so it needs to be located in the final binary exactly how the linker script says it should be. Without this attribute, the linker is free to move your Multiboot header somewhere else, because sections that aren't allocatable aren't important.
You can add the "allocatable" and "executable" attributes to a section like this: