Scusa la lentezza della risposta.

Puoi agire in due modi.
Se si verifica la situazione di cui parlavo, stripos va in errore, tuttavia l'operatore ternario che si occupa di verificare il valore di $next_cut lo intercetta al livello di funzionalità non succede nulla, lo script funziona correttamente.
Però rimane la visualizzazione del messaggio di erroe.

Puoi fare in modo che l'errore non venga visualizzato o controllare precedentemente che, come dicevi, $curr_pos+$max_char+1 non sia minore di strlen($string), in quel caso appunto la ricerca del nextcut non serve, visto che è impossibile sia necessario tagliare la stringa nuovamente essendo inferiore ai 500 caratteri, a quel punto l'ultimo taglio è strlen($stringa).
Verrebbe comunque risolto dal ternario ma evitando di fare la ricerca quando non necessaria eviti il massaggio di errore.