Stackが空のときにPopメソッドを呼び出すと、null/Nothingが返されるのではなく、例外InvalidOperationExceptionがスローされます。 このため、Popメソッドの戻り値からStackが空だったかどうかを判断することはできません。

Stackが空の状態でPopメソッドを呼び出すとInvalidOperationExceptionとなる
using System;
using System.Collections.Generic;

class Sample {
  static void Main()
  {
    var s = new Stack<string>();

    Console.WriteLine($"Count = {s.Count}"); // 0

    // Stackが空の状態でPop操作を行うとInvalidOperationExceptionがスローされる
    Console.WriteLine(s.Pop());
  }
}
実行結果
Count = 0
Unhandled exception. System.InvalidOperationException: Stack empty.
   at System.Collections.Generic.Stack`1.ThrowForEmptyStack()
   at System.Collections.Generic.Stack`1.Pop()
   at Sample.Main() in /home/smdn/samplecodes/dotnet/cs/test.cs:line 12

Stackが空かどうかに関わらず、例外をスローせずにポップ操作を試行するメソッドとしてTryPopメソッドが用意されています。

このほか、PopメソッドでInvalidOperationExceptionを避けるには、Popメソッドを呼び出す前にCountプロパティを参照して、要素が1つ以上格納されているかチェックするようにします。