I have this property in my view model:
[DisplayName(\"Region\")]
public int? RegionId { get; set; }
I pass my view model to my controller,
I think the issue is not assigning null, it's that the consuming code does not except a null value. The assignment is perfectly valid (although your null check is inverted, and the cast is redundant).
viewModel.RegionId = null;
As an aside you can use HasValue to check for null on a nullable type. Although in reality this it's no different to a null check, just looks a bit cleaner:
if (viewModel.RegionId.HasValue)
{
// do something
}