SSD1315

First off. Please post a link to the actual SSD1315 board that you have bought. e.g. AliExpress sale page.

Quote which library example is exhibiting a problem by name e.g. C:\Users\David Prentice\Documents\Arduino\libraries\Adafruit_SSD1306\examples\ssd1306_128x64_i2c\ssd1306_128x64_i2c.ino

And paste any modifications that you have made to solve the problem.
e.g. C++ statements
e.g. different VCC values

I bought a 1.3 inch SSD1315 link in #13
It gives a steady picture with Adafruit_SSD1306 and with U8g2

Note that the diagonal scroll functions have some extra arguments.
And the diagonal scroll works 100% for any size of rectangle in any direction. e.g.

// SSD1309, SSD1315 can set an exact rectangle.  Diag, Vert, Horiz
// SSD1306 always uses whole width 0-127.  No Vert.  Always Diag
void startscroll_rect(int x, int y, int w, int h, int up, int horiz)
{
    uint8_t cmd = 0x29;
    if (horiz < 0) cmd = 0x2A, horiz = 1; //diagonal left
    display.ssd1306_command(0xA3);
    display.ssd1306_command(y);  // vert scroll area
    display.ssd1306_command(h); // top+lines <= 64

    display.ssd1306_command(cmd); //vert_right_scroll
    display.ssd1306_command(horiz); //A enable.  1306 does not care
    display.ssd1306_command(y / 8); //B start page
    display.ssd1306_command(0x00); //C
    display.ssd1306_command((y + h - 1) / 8); //D end page
    display.ssd1306_command(up); //E
#if SSD == 0x1309 || SSD == 0x1315 //SSD1309 has extra arg
    display.ssd1306_command(x); //F
    display.ssd1306_command(x + w - 1);  //G
#endif

    display.ssd1306_command(0x2F);  //start

}

David.