Я думаю, что проблема в том, что на самом деле
DBNull.Value == null
//is always false
DBNull - это специальный класс для сравнения значений, возвращаемых из дБ, поэтому вам действительно необходимо проверить наличие нулевого условия И DBNull.value, если ваш массив содержит оба.
РЕДАКТИРОВАТЬ: Извините, глядя на ваш код, вам, возможно, просто нужно отменить операцию ИЛИ. Если o == null, ваше первое утверждение будет взорвано вашим исключением. Попробуйте:
if (o != null || o == DBNull.Value)