I followed the above very carefully and still couldn't get the initial value selected.
The reason was that although my bound value was defined as a string in typescript, my backend API was returning a number.
Javascript loose typing simply changed the type at runtime (without error), which prevented selection the of the initial value.
Component
myBoundValue: string;
Template
<mat-select [(ngModel)]="myBoundValue">
Solution was to update the API to return a string value.