Во втором варианте у тебя появляется свойство Name и поле name, которые не связаны друг с другом. В простых случаях, когда нужен доступ к полю класса без какой-либо логики, достаточно использовать автосвойства:
public string Name { get; set;}
В более сложных уже приходится писать код как в первом варианте (например, для реализации INotifyPropertyChanged).
Свойства могут играть роль «синтетических» полей класса, например, у тебя есть некоторое диалоговое окно с таблицей dataView:
Таким образом, при использовании этого диалога, чтобы получить выбранный элемент в таблицу, нет необходимости лезть во внутренности диалога — достаточно воспользоваться свойством SelectedUser.
Грубо говоря, свойства — это аналог сеттеров и геттеров из Java с более удобным синтаксисом и чуть дополненной семантикой.