Q:

How this if condition is unreachable?

IsSaveNew is type of bool?
CoverLetterId is type of int?
if (coverLetter.IsSaveNew ?? true || coverLetter.CoverLetterId == null)

coverLetter.CoverLetterId == null. This statement is marked as unreachable in visual studio(2012).
But if IsSaveNew was false, then it would reach at the second condition. Why Visual Studio says so?

A:

Looks like an operator precedence issue. Your statement is evaluated as:
if (coverLetter.IsSaveNew ?? (true || coverLetter.CoverLetterId == null))

So the right-hand operand to the || operator will never be evaluated since its left-hand operand is the literal true.
You can add parentheses to solve this problem:
if ((coverLetter.IsSaveNew ?? true) || coverLetter.CoverLetterId == null)

A:

|| has highger precedence than ?? operator.
Check out 7.2.1 Operator precedence and associativity
Your true || coverLetter.CoverLetterId == null works first. If you want coverLetter.IsSaveNew ?? true should work first, just use parentheses around it.
Like;
if ((coverLetter.IsSaveNew ?? true) || coverLetter.CoverLetterId == null)

But still visual studio says its unreachable

That means (probably) your coverLetter.IsSaveNew ?? true returns true, that's why your second operand doesn't evaluate.
From || Operator (C# Reference)

If the first operand evaluates to true, the second operand isn't
  evaluated. If the first operand evaluates to false, the second
  operator determines whether the OR expression as a whole evaluates to
  true or false.

