Best way to assess effect of treatment on test group not independently drawn from data I am trying to determine the efficacy of a remedial course given to a test group selected due to difficulty reading.
The dataset consists of students in seven and eighth grades. The dependent variable is reading level.
During the first year of data, the program had not yet started, so no students receive the course.
During the second year, a sample of students testing below a cutoff point received the training.
At the end of the second year, the mean reading level of all of the students goes up as does the reading level of students who took the course. Those who took the course show a higher gain, but I would like to understand whether the effect is significant.
If the students who received the course were IID, then I believe I could just regress reading scores on the independent dummy variable of whether they took the course to see if the course had a statistically significant effect with something like:
reg finalreadinglevel tookcourse, robust

Since, they are not IID, however and taking the course is highly correlated at the outset with a sub-par reading level, the above regression shows an extremely high t-value (>1000) that, presumably merely captures the correlation between the low starting reading level and taking the course.
Can anyone suggest the correct way to isolate the effect of the treatment given the endogeneity?  Is there anyway to use the first year's data to advantage or should it simply be dropped? Of note, students change between years 1 and 2 complicating a panel data approach.
I am hoping to implement this in Stata.
 A: This is a difficult causal inference problem (see e.g. this book that is freely available online for an extensive treatment of the topic). You want to compare the outcomes for the subjects that took the course with those outcomes they would have (counterfactually) had, if they had not taken the course. 
The simplest way to get that answer, is by randomly assigning some subjects eligible for the course to receive the course and some to not receive the course. With enough subjects randomized in this way, you would be able to easily get the average effect that taking this course has on average on the population (but not what effect the effect is for each individual person, which may vary around the average). Of course, that is not what was done here.
The next possibility is to take into account the whole mechanism of how people end up in the course and what affects outcomes (you can e.g. draw yourself a directed acyclic graph,  if you like that approach, to think about this). One relatively simple approach for this is to build a model for why people end up in the course. Best case: it is simply due to reading scores in the previous year (with worse scores leading to an increasingly higher chance of getting into the course), there are absolutely no other variables that influence it (i.e. unmotivated children cannot decline participation, parents have no say in it either, no further judgement is applied based on other unrecorded factors etc.) or at least no other ones that are no recorded on your dataset (in practice, it will be possible to verify these assumptions). In this best case, you create a propensity score for ending up in the course and adjust/stratify your comparison of the change of reading score based on that. People that do not have a chance to end up in the course or are 100% certain to be in the course do not have an effect in this analysis. That, of course, tells you that you have a problem, if participation was 100% below a certain score and 0% above that score. In that case, you can either conclude nothing or need to start making increasingly stronger assumptions.
One possibility for stronger assumptions might be to find similar people in other places (or the same place, but in different years - perhaps the year before and the year after to cacel out temporal trends as much as possible?!), in which case you also need to account for differences between populations of schools (or years), which starts to involved e.g. socioeconomic factors, quality of teaching in different schools/years, differing/changing access to libraries and so on. With that, one often runs into the issue of all the possible confounders not being available.
Depending on what your exact situation is, this may be a case of the famous RA Fisher quote on calling a statistician after an experiment is done.
A: Udate: see the recommendation about fuzzy RD in the comments in light of the changes to the original question.
I would suggest you consider a sharp regression discontinuity approach (not the "fuzzy" variety). Your setting is basically a platonic ideal for this, provided you have enough data. There is even an RD tag here that will help you find other questions.
The basic idea is that the students right around the score cutoff are essentially identical (other than the course), so comparing second-year scores of those who scored just above it and received treatment with those just below who did not receive it will give you the effect of the program. There are several robustness checks that you can do to test the validity of the assumptions required to treat this estimate as causal. 
Stata has user-written rd and rdrobust commands that are pretty useful. Scott Cunningham's Mixtape has a chapter on RD with Stata examples of both fuzzy and sharp RD.
A: What you need to do is compare the pre/post difference for those who took the course with the same difference for those who did not take the course. I would do a 2X2 ANOVA, with pre/post as a within subjects factor and group as a between subjects factor. This would show you whether the group who did the program improved in reading more than those who didn't do the program. 
You will get a main effect for Group (that's what your regression is showing you). You may also get a main effect for pre/post: if students improve over time. What you are looking for is an interaction. Is the pre/post effect larger for the group that did the program than it is for the group that did not? (You may need post hoc tests to sort it all out).
Even if you get the interaction, you'll still have an interpretive problem: Why did the group who got the program grow to a larger extent than the other group? It could be the program, but it could also be something else. For example, it could be a ceiling effect. The group that didn't get the program started out with higher scores so they had less room to move up. There is no way to sort his out, or to know if the program would be equally effective with those better students. 
Regarding the issue of IID observations: You don't really know that they aren't IID. There doesn't seem to be any reason why they are not independent: No student's scores are likely to have affected any other student's scores. And, the only difference in the distributions that we know about is the mean level. But, what is supposed to be the same is the shape of the distribution (specifically, ANOVA assumes a normal distribution in the population). However, ANOVA is pretty robust to a violation of the assumption of normality, so if they aren't normal distributions, that shouldn't be too much of a problem. On the other hand, you should look to see if there are problems with the homogeneity of variance assumption.
If you aren't satisfied that the equal distributions assumptions is ok, then you would want to go with a non-parametric test such as the Kruskal-Wallis test.
