Don't think that would work. If somePageContentItem is not dynamically typed, then the .Page accessor cannot be used.
Excuse my error, you're right of course. You would need to use Linq to access the part as well. Or, use a combination of both:
var field = ((ContentPart)somePageContentItem.Page).Fields.Where(f => f.Name == "SomeRuntimeKnownFieldName").Single();
Now somePageContentItem does need to be dynamically typed, accessing its Page part, which in turn is cast to ContentPart, so you can access its Fields using LINQ.
And as you already did in your example, you can access Parts using LINQ as well and not use dynamic at all.
In theory you should be able to access the Value field by invoking Storage.Get<string>(). However, not all fields may implement a Value property nor implement it like that, so precaution is advised.