Using "&&" it will stop the evaluation at the first false, so something like this should work for you:

 public class MyClass
 {
 public string Item1 { get; set; }
 public string Item2 { get; set; }
 public string Item3 { get; set; }
 public string Long { get; set; }
 public string Lat { get; set; }
 public override string ToString()
 {
 var sb = new StringBuilder();
 var isFullyPopulated =
 (AddPropertyData(sb, "{0}", Item1) &&
 AddPropertyData(sb, ", item2 {0}", Item2) &&
 AddPropertyData(sb, ", item3 {0}", Item3)) &&
 AddPropertyData(sb, ", long: {0}, lat: {1}", Long, Lat);

 return sb.Length > 0 ? sb.ToString() : Item1;
 }

 private static bool AddPropertyData(StringBuilder sb, string format, params string[] data)
 {
 if (data.All(x => !String.IsNullOrWhiteSpace(x)))
 {
 sb.AppendFormat(format, data);
 return true;
 }
 return false;
 }
 }