Si asigna el valor predeterminado ay selectedWorkoutusa [ngValue](que permite usar objetos como valor; de lo contrario, solo se admiten cadenas), entonces debería hacer lo que quiera:
<select class="form-control" name="sel"
[(ngModel)]="selectedWorkout"
(ngModelChange)="updateWorkout($event)">
<option *ngFor="let workout of workouts" [ngValue]="workout">
{{workout.name}}
</option>
</select>
Asegúrese de que el valor que asigna selectedWorkoutsea la misma instancia que la utilizada en workouts. No se reconocerá otra instancia de objeto, incluso con las mismas propiedades y valores. Solo se comprueba la identidad del objeto.
actualizar
Soporte agregado angular para compareWith, que hace que sea más fácil establecer el valor predeterminado cuando [ngValue]se usa (para valores de objeto)
De los documentos https://angular.io/api/forms/SelectControlValueAccessor
<select [compareWith]="compareFn" [(ngModel)]="selectedCountries">
<option *ngFor="let country of countries" [ngValue]="country">
{{country.name}}
</option>
</select>
compareFn(c1: Country, c2: Country): boolean {
return c1 && c2 ? c1.id === c2.id : c1 === c2;
}
De esta manera, se puede establecer una instancia de objeto diferente (nueva) como valor predeterminado y compareFnse usa para determinar si deben considerarse iguales (por ejemplo, si la idpropiedad es la misma.