I recently updated to the most current release of fish, version 3.1.0. I found that in the new version, the cursor shape is not updated correctly anymore when using vi mode. I confirmed this for current master as well.
With the above settings, in a new session, fish shows the correct line shape. It switches to block shape when I press ESC. However, it does not switch back to line if I then enter insert mode with a or i. It also does not switch to underscore if I press r.
I bisected this issue and traced it back to ff5524944, which removed event handler support for implicit sets. Such a set is present in input.cpp: