Yes, you could use a validation rule to prevent this (Would also work in the same way for Project completion.
In the Evaluation Criteria, select Formula Options to open the dialogue box. In the Functions list you will find 'IsManuallySet', use this to check if the Milestone State is manually set. You might also want to have a similar rule that checks the %Complete to ensure that method is also prevented from 'completing' the Milestone.