Question: When should I use dependency properties in WPF?

They are static, so we save a lot on memory, compared to using .NET properties.
Other gains of using dependency properties over .NET properties are:
1) no need to check thread access
2) prompt a containing element to be rendered
etc...

So it seems I should ALWAYS use dependency properties in my projects where I use WPF?

Maybe for some trivial properties of helper classes here and there I could
get away with .NET properties...

Answer: 
The main reason to create `DependencyProperty` is when you write you own WPF control.
`DependencyProperties` can be used as binding source and target, and can be animated.
The properties of all framework's controls are implemented as `DependencyProperty`, that why you can make powerful data binding in XAML.

However in most situation, like in with the MVVM pattern, you don't need dependency properties, `INotifyPropertyChanged` is enough.
Dependency properties are used when you want data binding in a `UserControl`, and is the standard method of data binding for the WPF Framework controls. DPs have [slightly better binding performance](https://stackoverflow.com/questions/570684/inotifypropertychanged-vs-dependencyproperty), and everything is provided to you when inside a `UserControl` to implement them.

Otherwise, you typically use `INotifyPropertyChanged` for binding elsewhere, since it's easier to implement in stand-alone classes and has less overhead. As far as your original assumptions:

1. There is a local instance of your variable, you definitely do not save any overhead over a property since there is significant data binding logic built-in.
2. [They must be accessed on the main thread](https://stackoverflow.com/a/783154/93306).