Why I would use TF-IDF after Bag-of-Words (CountVectorizer)?
This is the standard TF-IDF feature extraction: you transform the document counts.  It just looks odd to separate the two steps like this.  sklearn provides both TfidfTransformer and TfidfVectorizer; note the documentation of the latter:

Equivalent to CountVectorizer followed by TfidfTransformer.