Updating the player statistics text
Your update status method does too much. It has to decide which panel to use, which string to create and even how to create it.

If you separated them you could focus on exacly one task at a time:

The entry method should just decide which specialized update method to use.

It passes the required parameters to them and lets them do the job.

After reciving the result it passes it to the SetText method.

private void UpdateStatusLabels(PanelType panelType)
{
    var playerStats = Player.BaseStats;     
    var values = Enum.GetValues(typeof(StatsOrders));
    var names = from object value in values select value.ToString();

    switch (panelType)
    {
        case PanelType.Stats:
            var playerStatsText = CreateStatsPanelText(playerStats, names);
            SetText(panelStats, "EditorOnly", playerStatsText);
        break;

        case PanelType.Points:
            // ...
        break;
    }

}


Everything the specialized methods do is to create the new string. (this is an example for one of them).

You don't need to use arrays and indexes. As you are looping over both collections synchronously you can make your life easier and use the Zip extension to iterate over both of them at the same time.

For creating the status text you should use the StringBuilder which makes the string creation cleaner.

private void CreateStatsPanelText(IEnumerable&lt;Stats.Stats&gt; playerStats, IEnumerable&lt;string&gt; names)
{
    var playerStatsText = new StringBuilder();

    foreach (playerStats.Zip(names, (playerStat, name) =&gt; new { playerStat, name }))
    {
        playerStatsText
            .Append(name.SplitOnCapitalLetters())
            .Append(" : ")
            .Append(playerStat.Increase(playerStat.PointsInStats))
            .AppendLine();
    }

    return playerStatsText.ToString();
}