Why do certain FNames get capitalized in packaged builds?

The case of an FName depends on the first instance that is created with that unique (case-insensitive) string. If you create the FName for “x” and other packages (or code) uses the FName “X”, whether the x is uppercase or lowercase will depend upon which of those is encountered first by the engine. You can not change this behavior so make sure that all uses of the string treat the FName as case-insensitive.