After some more research, I did find a "usable" answer to this...
There doesn't seem to be a direct way, but you can indirectly determine the shutdown type by reading the event logs. Here's the method to do so:
private void readEventLogs()
{
string query = "*[System/EventID=1074]";
EventLogQuery elq = new EventLogQuery("System", PathType.LogName, query);
EventLogReader elr = new EventLogReader(elq);
EventRecord entry;
while ((entry = elr.ReadEvent()) != null)
{
if (entry.TimeCreated.HasValue && entry.TimeCreated.Value.AddMinutes(1) > DateTime.Now)
{
string xml = entry.ToXml();
if (xml.ToLower().Contains("restart"))
{
System.IO.File.WriteAllLines(@"C:\shutdown.txt", new string[] { "RESTART" });
}
else if (xml.ToLower().Contains("power off"))
{
System.IO.File.WriteAllLines(@"C:\shutdown.txt", new string[] { "SHUT DOWN" });
}
}
}
}
This will cycle through all of the shutdown events and find one that happened within the last minute. Since it's very unlikely you've shutdown more than twice in the last minute, this should be your entry.
The entry contains lots of information, but the defining one that I cared about was that it denoted "restart" or "power off". Keying in on these, I tested by writing out to a text file which one happened.
Since these are event logs, they will likely be affected by localization.