Classic case of what you can do with 'sed':
sed -n '/^!--- Marker two --!/,/^!--- Marker three --!/{
/^!--- Marker three --!/d;p;}' \
infile > outfile
The only gotcha is if the first marker appears more than once in the data. The patterns match the start of section and start of the next section; the commands within the braces delete the line for the start of the second section, and print all the other lines.
You can also process multiple such patterns to separate files using the 'w' command (slightly different matching scheme - but can be adapted to the one above if need be):
sed -n -e '/!--- Marker one --!/,/!--- Marker two --!/w file1' \
-e '/!--- Marker three --!/,/!--- Marker four --!/w file2' infile
Etc.