Если вы просто скажете
let o : obj = ...
printfn "%s" (o.GetType().ToString())
что вы получаете? Это действительно int? (int32 или uint32 или что?)
Оператор:?> Является правильным оператором downcast, но вам нужно, чтобы типы соответствовали. После приведения к фактическому типу, если вам нужно преобразовать один интегральный тип в другой, используйте соответствующую функцию для целевого типа, например
let x : int = int myUnsignedInt
// first 'int' is type, second is function to convert-to-int