LINQ: quando usar SingleOrDefault vs. FirstOrDefault () com critérios de filtragem

Considere os métodos de extensão IEnumerableSingleOrDefault() eFirstOrDefault()

Documentos MSDN queSingleOrDefault:

Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; este método lança uma exceção se houver mais de um elemento na sequência.

enquanto queFirstOrDefault do MSDN (presumivelmente ao usar umOrderBy() ouOrderByDescending() ou nenhum de todos),

Retorna o primeiro elemento de uma sequência

Considere um punhado de consultas de exemplo, nem sempre é claro quando usar esses dois métodos:

var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE

var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?

var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?

Questão

Quais convenções você segue ou sugere? ao decidir usarSingleOrDefault() eFirstOrDefault() nas suas consultas LINQ?