As you already discovered, one way is to use the DelegateControl approach (with PlaceholderAdditionalPagehead) and that's in fact what I've been using for a couple of years now.
The key is how to access the built-in editform.aspx/dispform.aspx pages with the embedded WebPart showing the SPListItem. That's done by hooking your WebControl into OnPreRender/OnLoad to check
SPContext.Current.FormContext.FormMode if you are on a SharePoint form page.
Then you need to find the ListFormWebPart and get your hands on the fields you are looking for.
Basically something like the pseudo-code below (though it is much simplified for brevity):
First, get the ASP.NET controls of the current page:
Then find the ListFormWebPart (either loop recursively or use another smart way to find it deep down the controls collection):
if (typeof(ListFormWebPart) == childControl.GetType())
ListFormWebPart listFormWebPart = (ListFormWebPart)childControl;
Finally, dive into the controls collection of the ListFormWebPart to find the
ListFieldIterator control (again, either loop recursively or use another smart way to find it deep down the controls collection) which itself contains a collection of the actual fields of the SPListItem. E.g. for a text field:
if (typeof(TextField) == formFieldChild.GetType())
TextField textField = (TextField)formFieldChild;
if (textField.FieldName == "YourFieldNameGoesHere")
// Get the field value and do with it whatever you want
string myFieldValue = textField.Text;
Finally, the last thing that comes into my mind is to develop a custom ControlAdapter to hook into the ListFormWebPart and read its fields etc., though I haven't tried this myself because I'm quite happy with the DelegateControl approach mentioned above.
Hope that helps.
EDIT: Added a few lines to clarify things a little bit more.