Any help with the validation rule would be much appreciated!
4 answers

You'll need to have a Lookup Relationship field on the Contract object that links back to the opportunity records. Once that is in place, you can create a validation rule on the Contract object that checks the Stage of the associated opportunity record.
Try this:
AND(
ISNEW(),
TEXT(Opportunity__r.StageName) <> "Contract Out"
)
This rule will only fire when you are creating a new contract record. Otherwise, it would prevent you from editing contracts when the stage has been moved to another value (ex Sold).
Aiden