Unfortunately each slice of the image's metadata (AKA the PropertyItem object) can only be retrieved using a rather unintuitive integer-based ID look up. For example, you have to know that the "Date Taken" information can be accessed using a PropertyItem ID of 36867. Perhaps an enumeration of these IDs will be added to a future version of the Framework to help make this task easier for programmers? Justin Rogers made such an object available here to help folks out in the meantime.
Once the "Date Taken" PropertyItem has been defined we still run into problems after decoding it to a UTF8 string. To have the most flexibility in addressing this information it would be ideal to convert it to a DateTime object. However, the PropertyItem string value is decoded in a "YYYY:MM:DD HH:MM:SS" format. Sadly, the colons between the year and the month and the month and the day throw off both the Convert.ToDateTime() and DateTime.Parse() methods.
I've listed the GetDateTaken() method below as an example of the remaining string manipulation necessary to complete this task:
public DateTime GetDateTaken(Image targetImg)
//Property Item 36867 corresponds to the Date Taken
PropertyItem propItem = targetImg.GetPropertyItem(36867);
//Convert date taken metadata to a DateTime object
string sdate = Encoding.UTF8.GetString(propItem.Value).Trim();
string secondhalf = sdate.Substring(sdate.IndexOf(" "), (sdate.Length - sdate.IndexOf(" ")));
string firsthalf = sdate.Substring(0, 10);
firsthalf = firsthalf.Replace(":", "-");
sdate = firsthalf + secondhalf;
dtaken = DateTime.Parse(sdate);