Каким образом после преобразования long в Long я смог получить null?
Возможно ли, что это редкий косяк JVM?
Практически исключено.Или какие еще могут быть варианты?
Возможно, это косяк в вашем коде ... и не столь редкий. ;-)
Вообще, лучше избегать классов, когда можно использовать примитивы.
Исключение: generics.foo(Long num) {
  // omitted
}

long x = 10;

foo(x); // говорите, вот так null?
foo(new Long(x)); // а если так?