Because properties of anonymous types are readonly after construction. You cannot change them once the object has been created.
They can achieve this using a get only property, but not with a public field (you can always change a field).
EDIT: I've looked around but couldn't find an obvious reason as to why they didn't go with public read-only fields. However, my best guess is: so that you can have properties.
If they had exposed public fields, and didn't have any properties, inevitably, anonymous types would be unusable by things that look for public properties, e.g. WPF binding. So having properties with private readonly backing fields probably was the safer choice.