> Is there someway to control read-only access at a field level on a form?
Access to data (editable/read-only/hidden) can be set for each attribute individually. This is not tied to any particular form but rather to the attribute itself. If the attribute access is set, say, to read-only, it will be read-only on all forms where the attribute is shown including inline editing on a related object form or its own object form.
PROTECT action is useful when you want to control access depending on some data, for example not allow changing an account if its status is set to Closed. If you want an attribute to be always read-only for users of particular access level you can simply indicate it in that access level without having to add a PROTECT rule to an object.