To identify the vertices to delete, check the interior angle at each vertex and where this angle is very high (near to 360 degrees), you can delete the vertex.
To measure the interior anlge, I use this solution. You can now use QGIS expressions with the expression below an re-draw the polygon, but exluding the vertices with interior angle larger than let's say 350 degrees (you can change this value on line 3 of the expression to fit your needs).
I would advice to first use the expression with Geometry Generator to see the result and when satisfied, create the output as actual geometry (new layer) with Geomtry by Expression - see here for the differences between both options. The expression remains the same.
Blue: initial polygon, four vertices deleted, resulting in the new polygon with red outline - visualized here with Geometry generator:

Changing the angle to 180, you get another result that deletes all "bays" of the polygon:

Use this expression:
with_variable(
'angle',
350, -- change this value to fit your needs
make_polygon(
make_line(
point_n($geometry,1),
array_filter(
array_foreach(
generate_series (2, num_points( $geometry)-1),
if (
with_variable (
'vertex',
@element,
with_variable (
'azimuth1',
degrees (
azimuth(
point_n($geometry,@vertex-1),
point_n($geometry,@vertex)
)
),
with_variable (
'azimuth2',
degrees (
azimuth(
point_n($geometry,@vertex),
point_n($geometry,@vertex+1)
)
),
case
when (@azimuth1 > @azimuth2) and (@azimuth1 > @azimuth2+180) then 540-@azimuth1+@azimuth2
when (@azimuth1 > @azimuth2) then 180-@azimuth1+@azimuth2
when (@azimuth1 < @azimuth2) and (@azimuth1+180>@azimuth2) then 180 + @azimuth2-@azimuth1
when (@azimuth1 < @azimuth2) then @azimuth2-@azimuth1-180
end
)
)
) < @angle,
point_n($geometry,@element),
'delete'
)
),
@element is not 'delete'
)
)
)
)