Attaching an event receiver to your list which dynamically populates the values in your ReleaseMonth column (as recommend by @Alex Choroshin) would be a good start, but you're probably going to run into problems when you try also display the value of the originally selected value.
This is because the values in the SPFieldChoice column are actually displayed for every
item in the list, and your list items will probably each need to
display a different set of options / values -- because
each item would potentially have been entered with a different ReleaseMonth
value.
So my recommendation would be to do the following:
Step 1:
Attach a list item event reciever to your list, but instead of doing any filtering inside it, simply populate it with a range of date values, starting from the minimum possible ReleaseMonth value (if your system defines one, or if not, then just the value of the oldest selected ReleaseMonth value), through to the current month and it's two successive months.
This will atleast allow your list's display form to pull the appropriate value from the column for every and any list item. So far so good, now to take care of the field in edit mode...
Step 2:
Then, use either SharePoint Designer or a feature reciver, add some JavaScript to your list's edit form which dynamically hides the date values which don't apply to the that specific item.
To do this, merely loop through every item in the choice field's dropdown and hide every value that does not equal the originally selected value, the current month, or any month in the future.
Note: The event receiver should be set to fire on the ItemAdded, ItemUpdated and ItemDeleted events to ensure that the values in the ReleaseMonth field are automatically re-evaluated and repopulated automatically every time the acceptable range of date values is changed.