Dice game rules implementation
Well, I am not familiar with die, but the obvious improvement is to encapsulate those rules into separate entities. For example:

public interface IRollScoreRule
{
    int CalculateRollScore(IEnumerable&lt;IRollResult&lt;int&gt;&gt; results);
}

public interface IRollScoreRules : IRollScoreRule
{
    bool IsOpeningRoll(IEnumerable&lt;IRollResult&lt;int&gt;&gt; results);
    void AddRule(IRollScoreRule rule);
    void RemoveRule(IRollScoreRule rule);
}

public class ScoreFivesRule : IRollScoreRule
{
    int CalculateRollScore(IEnumerable&lt;IRollResult&lt;int&gt;&gt; results)
    {
        // i think some of this logic can be extracted to base class
        // results.GroupBy(e =&gt; e.Value).Where(g =&gt; g.Key == 5) part for example
        // is common for most of the rules
        var score = results.GroupBy(e =&gt; e.Value)
                        .Where(g =&gt; g.Key == 5)
                        .Where(g =&gt; g.Count() &lt; 3)
                        .Sum(g =&gt; g.Count() * 50);
        return score;
    }
}


Then in your GameRollScoreRules.CalculateRollScore method you can iterate through collection of rules (using IEnumerable.Aggregate, for example) to get the total score, instead of having one huge method.

I also think you might want to tweak the IsOpeningRoll method. I mean, if I understand the use-case from your screenshots correctly, then with every dice roll, you want to know both - score value and if this value is higher then 500. Which means that using your GameRollScoreRules class as it is you would essentially calculate score twice (by calling CalculateRollScore and IsOpeningRoll methods). I think you sould either pass the resulting score to IsOpeningRoll method as a parameter, or remove this method all together and replace CalculateRollScore return type with some complex object (which will contain score value and bool flag) instead.