The following code will connect to a Salesforce instance and allow you to execute a report and return the results. This code is remarkably simply yet took a while to put together. I blame Salesforce for having very shitty sparse documentation. Hopefully though this will help somebody from hours/days of frustration.
This code was run under .NET 4.5. It is using the following Nuget packages:
- RestSharp (http://www.nuget.org/packages/RestSharp)
 - DeveloperForce.Force (https://www.nuget.org/packages/DeveloperForce.Force/)
 
Requires you to create a Salesforce Connected App (https://help.salesforce.com/apex/HTViewHelpDoc?id=connected_app_create.htm)
- Create the App (In Salesforce -> Setup -> Create -> Apps -> Connected Apps (scroll down) -> New
 - New Connected App must have "Enable OAuth Settings" checked.
 - Callback Url must be set (I set mine to http://localhost/).
 - You must copy the Apps Consumer Key and Consumer Secret
 - YOU MUST ENABLE THE APP FOR THE USER/PROFILE THAT IS BEING USED TO ACCESS THE REPORT
 
*Included 2 versions of UsernamePasswordAsync. I believe the commented out section is relevant to an older API.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;
namespace Console1
{
    class _Startup
    {
        static void Main(string[] args)
        {            
            string message = "";
            try
            {
                var task = Reports_Get_Async();
                task.Wait();
            }
            catch (Exception ex)
            {                
                if (ex.InnerException != null)
                {
                    message += Environment.NewLine + ex.InnerException.Message;
                }
            }
            Console.WriteLine("Results: ");
            Console.WriteLine(message);
            Console.WriteLine("Continue?");
            var name = Console.ReadLine();
        }
       
        public static async Task Reports_Get_Async()
        {
            string username = "myemail@example.com";
            string password = "myPassword";
            string usertoken = "xxxxxxxxxxxxxxxxxxxxxx";
            string consumerKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            string consumerSecret = "111111111111111111111";
            var isSandbox = false;
            var url = "https://login.salesforce.com/services/oauth2/token";
            if (isSandbox)
            {
                url = "https://test.salesforce.com/services/oauth2/token";
            }
            var authClient = new Salesforce.Common.AuthenticationClient();
            authClient.ApiVersion = "v34.0";            
            //await authClient.UsernamePasswordAsync(sfdcConsumerKey, sfdcConsumerSecret, username, password + token, ".net-api-client", url);
            await authClient.UsernamePasswordAsync(consumerKey, consumerSecret, username, password + usertoken, url);
            var reportId = "XXXXXXXXXX4CoJc"; //Salesforce Id for the report I need           
            string reportUrl = "/services/data/" + authClient.ApiVersion + "/analytics/reports/" + reportId + "?includeDetails=true";            
            //using the Nuget RestSharp package (http://restsharp.org/)
            var restClient = new RestSharp.RestClient(authClient.InstanceUrl);
            var restRequest = new RestSharp.RestRequest(reportUrl, RestSharp.Method.GET);
            restRequest.AddHeader("Authorization", "Bearer " + authClient.AccessToken);
            var restResponse = restClient.Execute(restRequest);
            var reportData = restResponse.Content; // raw content as json string            
        }
    }
}