No, this is explicit interface implementation. This line:
protected event PropertyChangedEventHandler PropertyChanged;
can't implement the INotifyPropertyChanged contract, because it's not public. Other classes can't refer to it, so the ObservableCollection doesn't look to its clients like it implements the interface it says it does. E.g.
ObservableCollection<string> coll;
// ObservableCollection implements INotifyPropertyChanged, so I should be able to...
coll.PropertyChanged += ...
// ... but this wouldn't compile because PropertyChanged is protected
To get around this, ObservableCollection adds another implementation of PropertyChanged, which is "scoped" to the INotifyPropertyChanged interface. That is, it's available only if a client accesses the ObservableCollection via a reference of type INotifyPropertyChanged, in which case it's effectively public. So now clients who want to use the fact that ObservableCollection implements INotifyPropertyChanged will be happy, because the event they're looking for is there:
INotifyPropertyChanged notifier = coll;
notifier.PropertyChanged += ... // compiles (using explicit implementation)
But the added PropertyChanged doesn't conflict with the protected member with the same name because it's scoped with that INotifyPropertyChanged.
prefix.