Currently you must load the main menu, select your created character and then join a server to spawn as the created character. If you join a server through the launcher your character does not get loaded and you spawn as a random character. This also happens if you have any character other than your created character selected when you join from the main menu.
Why this happens
When you load the main menu all of the character creation data gets loaded from config. When you select any character a function in MainMenu.c named OnChangeCharacter() gets called. This will load that character onto the screen and display it. Then you join a server and a function in IntroSceneCharacter.c named SaveCharacterSetup() which will find the index of the selected character's top, bottom, shoes, etc and pass them to the function SetCharacterInfo() in DayZGame.c. Then StoreLoginData() will be called which sends the data to the server.
If even one of those pieces(top, bottom, shoes) does not exist in the character creation config array, it will send a -1 in it's place, which signals the server to spawn a random character. This is the problem with joining a server from the main menu. You must have the created character selected or it will be random. It should always be the created character as a fresh spawn.
The problem with joining from the launcher is that only StoreLoginData() is called. Nothing else is loaded so the data sent to the server will always be -1 and therefore spawn a random character.