Solution One: Polys to Lines then Points
Based on a test I just ran, I suggest a process of first running Feature to Lines on your grid, and then running Feature Vertices to Points on the generated lines with a point type of BOTH_ENDS. Follow that up with a delete duplicate because there will be 8 points at every interior intersection and 4 on the exterior. The solution isn't perfect however.
First, it makes the assumption that your grid is topologically correct - adjoining cells in the grid have exactly the same vertices in the same places. If not, this may fail. I ran a test with a grid created by fishnet (hence no extra vertices), as well as by drawing a three cell, topologically correct 'grid' shown in the image. In both cases Feature to Lines created line segments that ran from one cell corner to the other - they were not broken up by intermediate vertices if present. If the cells aren't topologically correct, cell sides may generate multiple line segments and you end up with extra points/vertices.
Second is the big catch - it will only work on the interior lines. The north and west sides of the top left cell will be considered a single line. So in the next step, Feature Vertices to Points with end points, the corners of the overall grid won't get points (as those corners aren't ends.) In the image, the bright green dots are the result of FVtP. Note that there are only three lines around the outside of this 'grid' - the top half, and the bottom two quarters. Hence there are no points at the outside corners, because they are not the starts or ends of lines.
Alternative solution: Spatial Join.
Go ahead and run your Feature Vertices to Points on your original grid. As you noted, it creates a bunch of extra points that aren't at the corners. Take those points and Spatial Join them to themselves with a one-to-one relationship and using intersect as the method (possibly with a small search radius). Not only do you have points where you don't want them, but you have multiple points on top of each other because your cells have overlapping edges. But this works to your advantage here.
Once joined, open up the attribute table and you'll see a join count column. Any point that doesn't have four or greater in that column is not a corner point (because it would have come from a vertex shared by only two polygons, so there's be only two points to join). Only points with a count of four or eight (as noted in the first paragraph of the answer) are the points you're looking for. Once you delete all the others with lower join counts, you can run delete duplicate on the remaining points to get down to one point per corner.